economize 0.3.0__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 economize might be problematic. Click here for more details.
- economize/__init__.py +120 -0
- economize/_deprecation.py +59 -0
- economize/_version.py +4 -0
- economize/_wiring.py +22 -0
- economize/arch/__init__.py +63 -0
- economize/arch/base.py +594 -0
- economize/arch/config.py +90 -0
- economize/arch/families/__init__.py +12 -0
- economize/arch/families/deepseek_v3.py +16 -0
- economize/arch/families/gemma.py +13 -0
- economize/arch/families/gemma2.py +13 -0
- economize/arch/families/gemma3.py +23 -0
- economize/arch/families/gemma4.py +136 -0
- economize/arch/families/gemma4_unified.py +37 -0
- economize/arch/families/gpt_oss.py +18 -0
- economize/arch/families/granite.py +23 -0
- economize/arch/families/llama.py +15 -0
- economize/arch/families/ministral.py +13 -0
- economize/arch/families/ministral3.py +16 -0
- economize/arch/families/mistral.py +18 -0
- economize/arch/families/mixtral.py +13 -0
- economize/arch/families/nemotron_h.py +110 -0
- economize/arch/families/olmo2.py +13 -0
- economize/arch/families/olmo3.py +13 -0
- economize/arch/families/olmoe.py +13 -0
- economize/arch/families/phi3.py +13 -0
- economize/arch/families/qwen2.py +16 -0
- economize/arch/families/qwen2_moe.py +15 -0
- economize/arch/families/qwen3.py +16 -0
- economize/arch/families/qwen3_5.py +33 -0
- economize/arch/families/qwen3_moe.py +13 -0
- economize/arch/families/recurrent.py +34 -0
- economize/arch/families/smollm3.py +13 -0
- economize/arch/spec.py +217 -0
- economize/arch/standard.py +120 -0
- economize/backends/__init__.py +49 -0
- economize/backends/drafter.py +32 -0
- economize/backends/exporters.py +185 -0
- economize/backends/sglang/__init__.py +47 -0
- economize/backends/sglang/export.py +40 -0
- economize/backends/vllm/__init__.py +71 -0
- economize/backends/vllm/drafters.py +150 -0
- economize/backends/vllm/export.py +109 -0
- economize/backends/vllm/jump/__init__.py +34 -0
- economize/backends/vllm/jump/export.py +98 -0
- economize/backends/vllm/jump/model.py +414 -0
- economize/backends/vllm/jump/proposer.py +214 -0
- economize/backends/vllm/model.py +27 -0
- economize/backends/vllm/plugin.py +153 -0
- economize/backends/vllm/proposer.py +20 -0
- economize/backends/vllm/spec.py +68 -0
- economize/bench/__init__.py +58 -0
- economize/bench/cost_model.py +559 -0
- economize/bench/prompts.py +145 -0
- economize/bench/shape_readers.py +80 -0
- economize/bench/timing.py +215 -0
- economize/compat/__init__.py +12 -0
- economize/compat/tskip.py +454 -0
- economize/core/__init__.py +60 -0
- economize/core/calibration.py +548 -0
- economize/core/config.py +81 -0
- economize/core/hub.py +314 -0
- economize/core/lora_capable.py +29 -0
- economize/core/model.py +290 -0
- economize/core/recipe.py +167 -0
- economize/core/serialization.py +373 -0
- economize/core/technique.py +183 -0
- economize/decoding/__init__.py +72 -0
- economize/decoding/capabilities.py +123 -0
- economize/decoding/commit.py +166 -0
- economize/decoding/config.py +92 -0
- economize/decoding/cost.py +203 -0
- economize/decoding/drafting.py +65 -0
- economize/decoding/generation.py +188 -0
- economize/decoding/graphs.py +171 -0
- economize/decoding/loop.py +220 -0
- economize/decoding/passes.py +144 -0
- economize/decoding/plain.py +73 -0
- economize/decoding/policies.py +45 -0
- economize/decoding/protocols.py +401 -0
- economize/decoding/request.py +252 -0
- economize/decoding/result.py +44 -0
- economize/decoding/selectors.py +112 -0
- economize/decoding/stop.py +40 -0
- economize/decoding/verifiers.py +413 -0
- economize/distributed/__init__.py +27 -0
- economize/distributed/ssd.py +266 -0
- economize/distributed/tp.py +143 -0
- economize/distributed/workers.py +334 -0
- economize/errors.py +58 -0
- economize/integrations/__init__.py +21 -0
- economize/integrations/_generation_args.py +223 -0
- economize/integrations/_scoring.py +111 -0
- economize/integrations/_trl_common.py +29 -0
- economize/integrations/compressed_tensors.py +201 -0
- economize/integrations/generate.py +283 -0
- economize/integrations/hub.py +98 -0
- economize/integrations/kernels.py +252 -0
- economize/integrations/lm_eval.py +205 -0
- economize/integrations/peft.py +295 -0
- economize/integrations/quantized.py +39 -0
- economize/integrations/trl.py +323 -0
- economize/integrations/trl_vllm.py +445 -0
- economize/modules/__init__.py +31 -0
- economize/modules/dtype.py +119 -0
- economize/modules/kv_cache.py +145 -0
- economize/modules/lora.py +134 -0
- economize/modules/norm.py +42 -0
- economize/modules/readout.py +34 -0
- economize/modules/rotary.py +164 -0
- economize/modules/swiglu.py +70 -0
- economize/py.typed +0 -0
- economize/registry.py +192 -0
- economize/runtime/__init__.py +44 -0
- economize/runtime/cache.py +573 -0
- economize/runtime/context.py +205 -0
- economize/runtime/graphs.py +97 -0
- economize/runtime/mask.py +184 -0
- economize/runtime/phase.py +52 -0
- economize/runtime/policy.py +79 -0
- economize/runtime/runner.py +230 -0
- economize/runtime/transfer.py +31 -0
- economize/techniques/__init__.py +28 -0
- economize/techniques/_drafting/__init__.py +82 -0
- economize/techniques/_drafting/drafters.py +206 -0
- economize/techniques/_drafting/formats.py +72 -0
- economize/techniques/_drafting/head.py +118 -0
- economize/techniques/_drafting/training.py +40 -0
- economize/techniques/_drafting/wrapping.py +263 -0
- economize/techniques/_kv/__init__.py +41 -0
- economize/techniques/_kv/base.py +79 -0
- economize/techniques/_kv/wrapper.py +408 -0
- economize/techniques/_weights/__init__.py +61 -0
- economize/techniques/_weights/hessian.py +47 -0
- economize/techniques/_weights/layerwise.py +106 -0
- economize/techniques/_weights/obs.py +79 -0
- economize/techniques/_weights/snapshot.py +75 -0
- economize/techniques/_weights/technique.py +59 -0
- economize/techniques/_weights/transaction.py +71 -0
- economize/techniques/draft_model/__init__.py +16 -0
- economize/techniques/draft_model/config.py +43 -0
- economize/techniques/draft_model/drafter.py +213 -0
- economize/techniques/draft_model/technique.py +163 -0
- economize/techniques/dynamic_depth/__init__.py +149 -0
- economize/techniques/dynamic_depth/base.py +514 -0
- economize/techniques/dynamic_depth/calm.py +349 -0
- economize/techniques/dynamic_depth/flexidepth.py +232 -0
- economize/techniques/dynamic_depth/gateskip.py +137 -0
- economize/techniques/dynamic_depth/loradrop.py +244 -0
- economize/techniques/dynamic_depth/mod.py +161 -0
- economize/techniques/dynamic_depth/objective.py +267 -0
- economize/techniques/dynamic_depth/skipdecode.py +130 -0
- economize/techniques/eagle3/__init__.py +33 -0
- economize/techniques/eagle3/config.py +142 -0
- economize/techniques/eagle3/drafter.py +109 -0
- economize/techniques/eagle3/formats.py +220 -0
- economize/techniques/eagle3/layer.py +148 -0
- economize/techniques/eagle3/objective.py +100 -0
- economize/techniques/eagle3/technique.py +322 -0
- economize/techniques/early_exit/__init__.py +42 -0
- economize/techniques/early_exit/config.py +69 -0
- economize/techniques/early_exit/drafter.py +95 -0
- economize/techniques/early_exit/formats.py +27 -0
- economize/techniques/early_exit/layerskip.py +196 -0
- economize/techniques/early_exit/objective.py +140 -0
- economize/techniques/early_exit/path.py +96 -0
- economize/techniques/early_exit/rollout.py +59 -0
- economize/techniques/early_exit/technique.py +161 -0
- economize/techniques/frspec/__init__.py +20 -0
- economize/techniques/frspec/config.py +64 -0
- economize/techniques/frspec/drafter.py +122 -0
- economize/techniques/frspec/technique.py +100 -0
- economize/techniques/frspec/vocab.py +54 -0
- economize/techniques/hybrid/__init__.py +15 -0
- economize/techniques/hybrid/config.py +72 -0
- economize/techniques/hybrid/drafter.py +138 -0
- economize/techniques/hybrid/technique.py +76 -0
- economize/techniques/jump/__init__.py +75 -0
- economize/techniques/jump/aware.py +68 -0
- economize/techniques/jump/config.py +141 -0
- economize/techniques/jump/drafter.py +170 -0
- economize/techniques/jump/export.py +220 -0
- economize/techniques/jump/formats.py +29 -0
- economize/techniques/jump/mixer.py +97 -0
- economize/techniques/jump/objective.py +224 -0
- economize/techniques/jump/predictor.py +457 -0
- economize/techniques/jump/predictor_flow.py +147 -0
- economize/techniques/jump/rl.py +120 -0
- economize/techniques/jump/rollout.py +153 -0
- economize/techniques/jump/technique.py +254 -0
- economize/techniques/kv_evict/__init__.py +47 -0
- economize/techniques/kv_evict/policies.py +214 -0
- economize/techniques/kv_evict/tap.py +89 -0
- economize/techniques/kv_evict/technique.py +410 -0
- economize/techniques/kv_quant/__init__.py +58 -0
- economize/techniques/kv_quant/fp8.py +153 -0
- economize/techniques/kv_quant/kivi.py +183 -0
- economize/techniques/layer_skip/__init__.py +37 -0
- economize/techniques/layer_skip/config.py +85 -0
- economize/techniques/layer_skip/drafter.py +16 -0
- economize/techniques/layer_skip/metrics.py +66 -0
- economize/techniques/layer_skip/policy.py +32 -0
- economize/techniques/layer_skip/search.py +143 -0
- economize/techniques/layer_skip/technique.py +120 -0
- economize/techniques/lookup/__init__.py +29 -0
- economize/techniques/lookup/config.py +55 -0
- economize/techniques/lookup/drafter.py +70 -0
- economize/techniques/lookup/matching.py +66 -0
- economize/techniques/lookup/proposal.py +69 -0
- economize/techniques/lookup/technique.py +45 -0
- economize/techniques/lowrank/__init__.py +32 -0
- economize/techniques/lowrank/config.py +56 -0
- economize/techniques/lowrank/factorize.py +118 -0
- economize/techniques/lowrank/model.py +76 -0
- economize/techniques/lowrank/module.py +55 -0
- economize/techniques/lowrank/technique.py +36 -0
- economize/techniques/medusa/__init__.py +38 -0
- economize/techniques/medusa/config.py +76 -0
- economize/techniques/medusa/drafter.py +105 -0
- economize/techniques/medusa/formats.py +129 -0
- economize/techniques/medusa/heads.py +52 -0
- economize/techniques/medusa/objective.py +107 -0
- economize/techniques/medusa/technique.py +140 -0
- economize/techniques/medusa/trees.py +123 -0
- economize/techniques/prune/__init__.py +42 -0
- economize/techniques/prune/calibration.py +45 -0
- economize/techniques/prune/config.py +144 -0
- economize/techniques/prune/depth.py +190 -0
- economize/techniques/prune/masks.py +95 -0
- economize/techniques/prune/methods.py +100 -0
- economize/techniques/prune/model.py +99 -0
- economize/techniques/prune/semi_structured.py +40 -0
- economize/techniques/prune/sparsegpt.py +82 -0
- economize/techniques/prune/technique.py +71 -0
- economize/techniques/prune/wanda.py +40 -0
- economize/techniques/quant/__init__.py +73 -0
- economize/techniques/quant/awq.py +346 -0
- economize/techniques/quant/backends.py +233 -0
- economize/techniques/quant/config.py +187 -0
- economize/techniques/quant/constraints.py +152 -0
- economize/techniques/quant/draft.py +109 -0
- economize/techniques/quant/gptq.py +179 -0
- economize/techniques/quant/grid.py +242 -0
- economize/techniques/quant/marlin.py +488 -0
- economize/techniques/quant/methods.py +199 -0
- economize/techniques/quant/model.py +160 -0
- economize/techniques/quant/technique.py +80 -0
- economize/techniques/sparsity/__init__.py +48 -0
- economize/techniques/sparsity/backends.py +76 -0
- economize/techniques/sparsity/config.py +100 -0
- economize/techniques/sparsity/model.py +192 -0
- economize/techniques/sparsity/sparsify.py +269 -0
- economize/techniques/sparsity/technique.py +115 -0
- economize/techniques/vendor_mtp/__init__.py +42 -0
- economize/techniques/vendor_mtp/config.py +113 -0
- economize/techniques/vendor_mtp/drafter.py +177 -0
- economize/techniques/vendor_mtp/families.py +146 -0
- economize/techniques/vendor_mtp/formats.py +263 -0
- economize/techniques/vendor_mtp/module.py +67 -0
- economize/techniques/vendor_mtp/objective.py +18 -0
- economize/techniques/vendor_mtp/technique.py +213 -0
- economize/train/__init__.py +185 -0
- economize/train/checkpoint.py +302 -0
- economize/train/data/__init__.py +57 -0
- economize/train/data/chat.py +134 -0
- economize/train/data/masks.py +23 -0
- economize/train/data/sources.py +304 -0
- economize/train/data/tokens.py +81 -0
- economize/train/evaluate.py +160 -0
- economize/train/loop.py +442 -0
- economize/train/module.py +124 -0
- economize/train/objective.py +535 -0
- economize/train/objectives/__init__.py +59 -0
- economize/train/objectives/base.py +45 -0
- economize/train/objectives/ce.py +52 -0
- economize/train/objectives/common.py +220 -0
- economize/train/objectives/distill.py +107 -0
- economize/train/objectives/divergences.py +86 -0
- economize/train/objectives/steps.py +288 -0
- economize/train/objectives/weights.py +58 -0
- economize/train/offload.py +96 -0
- economize/train/optim.py +70 -0
- economize/train/rl.py +139 -0
- economize/train/rollout/__init__.py +36 -0
- economize/train/rollout/cache.py +175 -0
- economize/train/rollout/recurrent.py +171 -0
- economize/train/schedule.py +43 -0
- economize/train/teacher.py +113 -0
- economize/train/trainer.py +427 -0
- economize/train/utils.py +64 -0
- economize/unwrap.py +42 -0
- economize/validation.py +167 -0
- economize-0.3.0.dist-info/METADATA +372 -0
- economize-0.3.0.dist-info/RECORD +297 -0
- economize-0.3.0.dist-info/WHEEL +4 -0
- economize-0.3.0.dist-info/entry_points.txt +14 -0
- economize-0.3.0.dist-info/licenses/LICENSE +201 -0
economize/__init__.py
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"""economize: composable efficiency techniques for Hugging Face causal language models.
|
|
2
|
+
|
|
3
|
+
import economize
|
|
4
|
+
from transformers import AutoModelForCausalLM
|
|
5
|
+
|
|
6
|
+
base = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-0.5B")
|
|
7
|
+
model = economize.apply(base, economize.JumpConfig(target_layer=12, source_layer=18))
|
|
8
|
+
... # train the added parameters, or load trained ones:
|
|
9
|
+
model = economize.from_pretrained("path/to/checkpoint")
|
|
10
|
+
out = model.generate(input_ids, max_new_tokens=128, decoding=economize.DecodeConfig(cycle_length=4))
|
|
11
|
+
|
|
12
|
+
The root holds the technique-independent API (``apply``, ``EfficientModel``, decoding, errors, registries). The
|
|
13
|
+
configuration of each technique lives in its subpackage (``from economize.techniques.quant import QuantConfig``), with
|
|
14
|
+
one deliberate exception: :class:`~economize.techniques.jump.JumpConfig`, economize's own method and the subject of the
|
|
15
|
+
quick starts, is re-exported here as ``economize.JumpConfig``. It is the only one, so a new technique never edits this
|
|
16
|
+
module (``tests/unit/test_root_api.py`` guards both rules).
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
from __future__ import annotations
|
|
20
|
+
|
|
21
|
+
# Imported for their side effects: they register the built-in techniques, formats, exporters and backends.
|
|
22
|
+
from . import _wiring, compat, techniques # noqa: F401
|
|
23
|
+
from ._version import __version__
|
|
24
|
+
from .core import (
|
|
25
|
+
FORMATS,
|
|
26
|
+
TECHNIQUES,
|
|
27
|
+
AttachContext,
|
|
28
|
+
Capability,
|
|
29
|
+
Checkpoint,
|
|
30
|
+
CheckpointFormat,
|
|
31
|
+
EfficientModel,
|
|
32
|
+
Technique,
|
|
33
|
+
TechniqueConfig,
|
|
34
|
+
apply,
|
|
35
|
+
attach,
|
|
36
|
+
from_pretrained,
|
|
37
|
+
load,
|
|
38
|
+
read_checkpoint,
|
|
39
|
+
register_technique,
|
|
40
|
+
save,
|
|
41
|
+
teacher_fingerprint,
|
|
42
|
+
)
|
|
43
|
+
from .decoding import (
|
|
44
|
+
POLICIES,
|
|
45
|
+
VERIFIERS,
|
|
46
|
+
CostLog,
|
|
47
|
+
CycleDecoder,
|
|
48
|
+
DecodeConfig,
|
|
49
|
+
DecodeResult,
|
|
50
|
+
Draft,
|
|
51
|
+
Drafter,
|
|
52
|
+
DraftPolicy,
|
|
53
|
+
DraftRequest,
|
|
54
|
+
GreedySelector,
|
|
55
|
+
TokenSelector,
|
|
56
|
+
TopPSampler,
|
|
57
|
+
Verifier,
|
|
58
|
+
VerifyEvent,
|
|
59
|
+
)
|
|
60
|
+
from .errors import (
|
|
61
|
+
CheckpointFormatError,
|
|
62
|
+
ConfigError,
|
|
63
|
+
DuplicateNameError,
|
|
64
|
+
EconomizeError,
|
|
65
|
+
IncompatibleTechniquesError,
|
|
66
|
+
TeacherMismatchWarning,
|
|
67
|
+
UnknownNameError,
|
|
68
|
+
UnregisteredNameError,
|
|
69
|
+
UnsupportedModelError,
|
|
70
|
+
)
|
|
71
|
+
from .runtime import current_phase, phase
|
|
72
|
+
from .techniques.jump import JumpConfig # the one technique config at the root (see the module docstring)
|
|
73
|
+
|
|
74
|
+
__all__ = [
|
|
75
|
+
"FORMATS",
|
|
76
|
+
"POLICIES",
|
|
77
|
+
"TECHNIQUES",
|
|
78
|
+
"VERIFIERS",
|
|
79
|
+
"AttachContext",
|
|
80
|
+
"Capability",
|
|
81
|
+
"Checkpoint",
|
|
82
|
+
"CheckpointFormat",
|
|
83
|
+
"CheckpointFormatError",
|
|
84
|
+
"ConfigError",
|
|
85
|
+
"CostLog",
|
|
86
|
+
"CycleDecoder",
|
|
87
|
+
"DecodeConfig",
|
|
88
|
+
"DecodeResult",
|
|
89
|
+
"Draft",
|
|
90
|
+
"DraftPolicy",
|
|
91
|
+
"DraftRequest",
|
|
92
|
+
"Drafter",
|
|
93
|
+
"DuplicateNameError",
|
|
94
|
+
"EconomizeError",
|
|
95
|
+
"EfficientModel",
|
|
96
|
+
"GreedySelector",
|
|
97
|
+
"IncompatibleTechniquesError",
|
|
98
|
+
"JumpConfig",
|
|
99
|
+
"TeacherMismatchWarning",
|
|
100
|
+
"Technique",
|
|
101
|
+
"TechniqueConfig",
|
|
102
|
+
"TokenSelector",
|
|
103
|
+
"TopPSampler",
|
|
104
|
+
"UnknownNameError",
|
|
105
|
+
"UnregisteredNameError",
|
|
106
|
+
"UnsupportedModelError",
|
|
107
|
+
"Verifier",
|
|
108
|
+
"VerifyEvent",
|
|
109
|
+
"__version__",
|
|
110
|
+
"apply",
|
|
111
|
+
"attach",
|
|
112
|
+
"current_phase",
|
|
113
|
+
"from_pretrained",
|
|
114
|
+
"load",
|
|
115
|
+
"phase",
|
|
116
|
+
"read_checkpoint",
|
|
117
|
+
"register_technique",
|
|
118
|
+
"save",
|
|
119
|
+
"teacher_fingerprint",
|
|
120
|
+
]
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"""Deprecation warnings for names that moved or were renamed (layer 0: imports nothing of economize).
|
|
2
|
+
|
|
3
|
+
A module that keeps old names alive sets its module-level ``__getattr__`` to :func:`moved_getattr`. The ``load``
|
|
4
|
+
function it passes imports the new home explicitly inside the shim module, so that the layering test sees the edge.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import sys
|
|
10
|
+
import warnings
|
|
11
|
+
from collections.abc import Callable, Iterable, Mapping
|
|
12
|
+
from typing import Any
|
|
13
|
+
|
|
14
|
+
__all__ = ["moved_getattr", "warn_moved"]
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def warn_moved(old: str, new: str, *, stacklevel: int = 3) -> None:
|
|
18
|
+
"""Warn that ``old`` (a dotted name) is deprecated in favour of ``new``.
|
|
19
|
+
|
|
20
|
+
The default ``stacklevel`` points at the caller of the shim that calls this function (the module
|
|
21
|
+
``__getattr__`` or the deprecated method).
|
|
22
|
+
"""
|
|
23
|
+
warnings.warn(f"{old} is deprecated; use {new} instead", DeprecationWarning, stacklevel=stacklevel)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def moved_getattr(
|
|
27
|
+
module: str,
|
|
28
|
+
moved: Mapping[str, str] | Iterable[str],
|
|
29
|
+
new_home: str | None = None,
|
|
30
|
+
load: Callable[[], object] | None = None,
|
|
31
|
+
) -> Callable[[str], Any]:
|
|
32
|
+
"""A module ``__getattr__`` (PEP 562) that resolves deprecated names with a :class:`DeprecationWarning`.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
module: the shim module's ``__name__``.
|
|
36
|
+
moved: old name -> name in the new home, or an iterable of names that kept their name.
|
|
37
|
+
new_home: dotted name of the new home, used in the warning (default: ``module`` itself, for renames).
|
|
38
|
+
load: imports and returns the new home (default: ``module`` itself).
|
|
39
|
+
|
|
40
|
+
Unknown names raise :class:`AttributeError` as usual. Usage::
|
|
41
|
+
|
|
42
|
+
def _tskip() -> ModuleType:
|
|
43
|
+
from ...compat import tskip
|
|
44
|
+
|
|
45
|
+
return tskip
|
|
46
|
+
|
|
47
|
+
__getattr__ = moved_getattr(__name__, {"OldName": "NewName"}, "economize.compat.tskip", _tskip)
|
|
48
|
+
"""
|
|
49
|
+
names = dict(moved) if isinstance(moved, Mapping) else {name: name for name in moved}
|
|
50
|
+
home = new_home or module
|
|
51
|
+
|
|
52
|
+
def _getattr(name: str) -> Any:
|
|
53
|
+
if name not in names:
|
|
54
|
+
raise AttributeError(f"module {module!r} has no attribute {name!r}")
|
|
55
|
+
target = load() if load is not None else sys.modules[module]
|
|
56
|
+
warn_moved(f"{module}.{name}", f"{home}.{names[name]}")
|
|
57
|
+
return getattr(target, names[name])
|
|
58
|
+
|
|
59
|
+
return _getattr
|
economize/_version.py
ADDED
economize/_wiring.py
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""The composition root: it connects the lower layers to implementations that live in higher ones.
|
|
2
|
+
|
|
3
|
+
A layer imports only layers below it (``docs/ARCHITECTURE.md``, Section 2.1). Where a lower layer needs behaviour
|
|
4
|
+
from a higher one, it exposes a registry and the package root registers the implementation here, importing the
|
|
5
|
+
higher module on first use so that ``import economize`` stays light.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
from .core.model import GENERATE_IMPLEMENTATIONS
|
|
13
|
+
|
|
14
|
+
__all__: list[str] = []
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@GENERATE_IMPLEMENTATIONS.register("transformers")
|
|
18
|
+
def _transformers_generate(model: Any, inputs: Any = None, **kwargs: Any) -> Any:
|
|
19
|
+
""":func:`economize.integrations.generate.generate`, imported on the first ``EfficientModel.generate`` call."""
|
|
20
|
+
from .integrations.generate import generate
|
|
21
|
+
|
|
22
|
+
return generate(model, inputs, **kwargs)
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"""Architecture adapters (one per model family, looked up by ``config.model_type``)."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from .base import (
|
|
6
|
+
ARCHITECTURES,
|
|
7
|
+
SUPPORTED_ATTENTION,
|
|
8
|
+
ArchAdapter,
|
|
9
|
+
adapter_for,
|
|
10
|
+
module_device,
|
|
11
|
+
register_adapter,
|
|
12
|
+
)
|
|
13
|
+
from .config import (
|
|
14
|
+
PER_LAYER_CONFIG_FIELDS,
|
|
15
|
+
config_value,
|
|
16
|
+
is_heterogeneous,
|
|
17
|
+
kept_below,
|
|
18
|
+
layer_overrides,
|
|
19
|
+
renumbered,
|
|
20
|
+
set_layer_overrides,
|
|
21
|
+
text_config,
|
|
22
|
+
)
|
|
23
|
+
from .spec import (
|
|
24
|
+
LAYER_KINDS,
|
|
25
|
+
AttentionSpec,
|
|
26
|
+
HeadGeometry,
|
|
27
|
+
LayerKind,
|
|
28
|
+
PassContext,
|
|
29
|
+
StateKind,
|
|
30
|
+
layer_kind_of,
|
|
31
|
+
register_layer_kind,
|
|
32
|
+
)
|
|
33
|
+
from .standard import SoftcappedLogitsMixin, SparseStepMoeMixin, StandardDecoderAdapter
|
|
34
|
+
|
|
35
|
+
__all__ = [
|
|
36
|
+
"ARCHITECTURES",
|
|
37
|
+
"LAYER_KINDS",
|
|
38
|
+
"PER_LAYER_CONFIG_FIELDS",
|
|
39
|
+
"SUPPORTED_ATTENTION",
|
|
40
|
+
"ArchAdapter",
|
|
41
|
+
"AttentionSpec",
|
|
42
|
+
"HeadGeometry",
|
|
43
|
+
"LayerKind",
|
|
44
|
+
"PassContext",
|
|
45
|
+
"SoftcappedLogitsMixin",
|
|
46
|
+
"SparseStepMoeMixin",
|
|
47
|
+
"StandardDecoderAdapter",
|
|
48
|
+
"StateKind",
|
|
49
|
+
"adapter_for",
|
|
50
|
+
"config_value",
|
|
51
|
+
"is_heterogeneous",
|
|
52
|
+
"kept_below",
|
|
53
|
+
"layer_kind_of",
|
|
54
|
+
"layer_overrides",
|
|
55
|
+
"module_device",
|
|
56
|
+
"register_adapter",
|
|
57
|
+
"register_layer_kind",
|
|
58
|
+
"renumbered",
|
|
59
|
+
"set_layer_overrides",
|
|
60
|
+
"text_config",
|
|
61
|
+
]
|
|
62
|
+
|
|
63
|
+
from . import families # noqa: F401 (registers every family adapter)
|