fusion-bench 0.2.18__py3-none-any.whl → 0.2.20__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.
Files changed (50) hide show
  1. fusion_bench/__init__.py +6 -0
  2. fusion_bench/constants/banner.py +12 -0
  3. fusion_bench/method/__init__.py +2 -0
  4. fusion_bench/method/linear/simple_average_for_llama.py +30 -5
  5. fusion_bench/method/regmean_plusplus/__init__.py +3 -0
  6. fusion_bench/method/regmean_plusplus/clip_regmean_plusplus.py +192 -0
  7. fusion_bench/method/regmean_plusplus/regmean_plusplus.py +365 -0
  8. fusion_bench/method/simple_average.py +29 -3
  9. fusion_bench/modelpool/causal_lm/causal_lm.py +37 -6
  10. fusion_bench/modelpool/clip_vision/modelpool.py +45 -12
  11. fusion_bench/scripts/cli.py +1 -1
  12. fusion_bench/tasks/clip_classification/imagenet.py +1008 -2004
  13. fusion_bench/utils/lazy_state_dict.py +75 -3
  14. fusion_bench/utils/misc.py +66 -2
  15. fusion_bench/utils/modelscope.py +146 -0
  16. fusion_bench/utils/state_dict_arithmetic.py +10 -5
  17. {fusion_bench-0.2.18.dist-info → fusion_bench-0.2.20.dist-info}/METADATA +9 -1
  18. {fusion_bench-0.2.18.dist-info → fusion_bench-0.2.20.dist-info}/RECORD +50 -43
  19. fusion_bench_config/method/regmean/clip_regmean.yaml +1 -1
  20. fusion_bench_config/method/regmean_plusplus/clip_regmean_plusplus.yaml +11 -0
  21. fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch16_TALL20.yaml +73 -8
  22. fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch16_TALL20_model_only.yaml +27 -7
  23. fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TA8.yaml +34 -4
  24. fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TA8_control_task.yaml +14 -17
  25. fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TA8_model_only.yaml +14 -3
  26. fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TALL10.yaml +39 -5
  27. fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TALL12.yaml +49 -5
  28. fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TALL14.yaml +55 -5
  29. fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TALL14_model_only.yaml +21 -4
  30. fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TALL16.yaml +61 -5
  31. fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TALL18.yaml +67 -5
  32. fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TALL20.yaml +73 -5
  33. fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TALL20_model_only.yaml +26 -3
  34. fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_single_finetuned.yaml +7 -5
  35. fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_single_task_projection.yaml +6 -10
  36. fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_sun397_and_cars.yaml +6 -7
  37. fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_sun397_and_dtd.yaml +6 -7
  38. fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_sun397_cars_and_dtd.yaml +7 -8
  39. fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_svhn_and_mnist.yaml +8 -0
  40. fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_two_tasks_control_task.yaml +4 -6
  41. fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-large-patch14_TA8.yaml +32 -7
  42. fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-large-patch14_TA8_model_only.yaml +14 -6
  43. fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-large-patch14_TALL20.yaml +73 -8
  44. fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-large-patch14_TALL20_model_only.yaml +27 -7
  45. fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-large-patch14_individual.yaml +6 -10
  46. fusion_bench_config/modelpool/CausalLMPool/Qwen2.5-1.5B_math_and_coder.yaml +11 -0
  47. {fusion_bench-0.2.18.dist-info → fusion_bench-0.2.20.dist-info}/WHEEL +0 -0
  48. {fusion_bench-0.2.18.dist-info → fusion_bench-0.2.20.dist-info}/entry_points.txt +0 -0
  49. {fusion_bench-0.2.18.dist-info → fusion_bench-0.2.20.dist-info}/licenses/LICENSE +0 -0
  50. {fusion_bench-0.2.18.dist-info → fusion_bench-0.2.20.dist-info}/top_level.txt +0 -0
@@ -14,6 +14,7 @@ from torch import nn
14
14
  from transformers import AutoConfig
15
15
 
16
16
  from fusion_bench.utils.dtype import parse_dtype
17
+ from fusion_bench.utils.packages import import_object
17
18
 
18
19
  if TYPE_CHECKING:
19
20
  from transformers import PretrainedConfig
@@ -54,10 +55,13 @@ class LazyStateDict:
54
55
  """
55
56
 
56
57
  _local_path: str
58
+ """local path to the checkpoint."""
57
59
  _state_dict_cache: Optional[Dict]
60
+ """Cache for the state dict, if enabled."""
58
61
  _index_filename: Optional[str]
59
62
  _checkpoint_files: Optional[List[str]]
60
- _index: Optional[Dict]
63
+ _index: Optional[Dict[str, str]]
64
+ """Mapping of parameter names to checkpoint files."""
61
65
 
62
66
  def __init__(
63
67
  self,
@@ -71,7 +75,22 @@ class LazyStateDict:
71
75
  hf_cache_dir: Optional[str] = None,
72
76
  hf_proxies: Optional[Dict] = None,
73
77
  ):
78
+ """
79
+ Args:
80
+ checkpoint (str): Path to the checkpoint file or directory.
81
+ meta_module_class (Type[nn.Module], optional): Class of the meta module to instantiate.
82
+ meta_module (nn.Module, optional): Pre-initialized meta module.
83
+ cache_state_dict (bool): Whether to cache the state dict in memory.
84
+ torch_dtype (torch.dtype, optional): The dtype to use for the tensors.
85
+ device (str): The device to load the tensors onto.
86
+ hf_revision (str, optional): The revision of the model to download from Hugging Face Hub.
87
+ hf_cache_dir (str, optional): The cache directory for Hugging Face models.
88
+ hf_proxies (Dict, optional): Proxies to use for downloading from Hugging Face Hub.
89
+ """
90
+ self.cache_state_dict = cache_state_dict
74
91
  self.meta_module_class = meta_module_class
92
+ if isinstance(self.meta_module_class, str):
93
+ self.meta_module_class = import_object(self.meta_module_class)
75
94
  self.meta_module = meta_module
76
95
  if self.meta_module_class is not None:
77
96
  if self.meta_module is not None:
@@ -110,6 +129,18 @@ class LazyStateDict:
110
129
  self._state_dict_cache = {}
111
130
  else:
112
131
  self._state_dict_cache = None
132
+ elif len(self._checkpoint_files) == 1 and self._checkpoint_files[0].endswith(
133
+ SAFE_WEIGHTS_NAME
134
+ ):
135
+ # let the keys of self._index be the keys of the state dict, the values are the checkpoint file
136
+ with safe_open(
137
+ self._checkpoint_files[0], framework="pt", device=device
138
+ ) as f:
139
+ self._index = {key: self._checkpoint_files[0] for key in f.keys()}
140
+ if cache_state_dict:
141
+ self._state_dict_cache = {}
142
+ else:
143
+ self._state_dict_cache = None
113
144
  elif len(self._checkpoint_files) == 1 and self._checkpoint_files[0].endswith(
114
145
  WEIGHTS_NAME
115
146
  ):
@@ -137,7 +168,11 @@ class LazyStateDict:
137
168
  def config(self) -> "PretrainedConfig":
138
169
  return AutoConfig.from_pretrained(self._checkpoint)
139
170
 
140
- def state_dict(self) -> "LazyStateDict":
171
+ def state_dict(self, keep_vars: bool = False) -> "LazyStateDict":
172
+ """
173
+ Args:
174
+ keep_vars (bool): Ignored, as LazyStateDict does not support keep_vars. Just for compatibility.
175
+ """
141
176
  return self
142
177
 
143
178
  def _resolve_checkpoint_files(self, checkpoint: str):
@@ -255,6 +290,21 @@ class LazyStateDict:
255
290
  )
256
291
  return tensor
257
292
 
293
+ def __setitem__(self, key: str, value: torch.Tensor) -> None:
294
+ """
295
+ Set a tensor in the LazyStateDict. This will update the state dict cache if it is enabled.
296
+ """
297
+ assert key in list(
298
+ self.keys()
299
+ ), "KeyError: Cannot set a tensor for a key that does not exist in the LazyStateDict."
300
+ if self._state_dict_cache is not None:
301
+ self._state_dict_cache[key] = value
302
+ else:
303
+ log.warning(
304
+ "State dict cache is disabled, setting a tensor will not update the cache."
305
+ )
306
+ self._state_dict_cache = {key: value}
307
+
258
308
  def __contains__(self, key: str) -> bool:
259
309
  if self._state_dict_cache is not None and key in self._state_dict_cache:
260
310
  return True
@@ -314,7 +364,7 @@ class LazyStateDict:
314
364
 
315
365
  def __repr__(self) -> str:
316
366
  if self._index is not None:
317
- return f"{self.__class__.__name__}(index={self._index})"
367
+ return f"{self.__class__.__name__}(keys={list(self.keys())})"
318
368
  else:
319
369
  return (
320
370
  f"{self.__class__.__name__}(checkpoint_files={self._checkpoint_files})"
@@ -336,3 +386,25 @@ class LazyStateDict:
336
386
  raise RuntimeError(
337
387
  "Cannot get submodule because meta_module is not provided."
338
388
  )
389
+
390
+ def load_state_dict(
391
+ self, state_dict: Dict[str, torch.Tensor], strict: bool = True
392
+ ) -> None:
393
+ """
394
+ Load a state dict into this LazyStateDict.
395
+ This method is only for compatibility with nn.Module and it overrides the cache of LazyStateDict.
396
+
397
+ Args:
398
+ state_dict (Dict[str, torch.Tensor]): The state dict to load.
399
+ strict (bool): Whether to enforce that all keys in the state dict are present in this LazyStateDict.
400
+ """
401
+ log.warning(
402
+ "Loading state dict into LazyStateDict is not recommended, as it may lead to unexpected behavior. "
403
+ "Use with caution."
404
+ )
405
+ if strict:
406
+ for key in state_dict:
407
+ if key not in self:
408
+ raise KeyError(f"Key {key} not found in LazyStateDict.")
409
+ for key, value in state_dict.items():
410
+ self[key] = value
@@ -1,6 +1,13 @@
1
- from typing import Iterable, List
1
+ from difflib import get_close_matches
2
+ from typing import Any, Iterable, List, Optional
2
3
 
3
- __all__ = ["first", "has_length", "join_list"]
4
+ __all__ = [
5
+ "first",
6
+ "has_length",
7
+ "join_list",
8
+ "attr_equal",
9
+ "validate_and_suggest_corrections",
10
+ ]
4
11
 
5
12
 
6
13
  def first(iterable: Iterable):
@@ -23,3 +30,60 @@ def join_list(list_of_list: List[List]):
23
30
  for item in list_of_list:
24
31
  ans.extend(item)
25
32
  return ans
33
+
34
+
35
+ def attr_equal(obj, attr: str, value):
36
+ """
37
+ Check if the attribute of the object is equal to the given value.
38
+ Returns False if the attribute does not exist or is not equal to the value.
39
+
40
+ Args:
41
+ obj: The object to check.
42
+ attr (str): The attribute name to check.
43
+ value: The value to compare against.
44
+
45
+ Returns:
46
+ bool: True if the attribute exists and is equal to the value, False otherwise.
47
+ """
48
+ if not hasattr(obj, attr):
49
+ return False
50
+ return getattr(obj, attr) == value
51
+
52
+
53
+ def validate_and_suggest_corrections(
54
+ obj: Any, values: Iterable[Any], *, max_suggestions: int = 3, cutoff: float = 0.6
55
+ ) -> Any:
56
+ """
57
+ Return *obj* if it is contained in *values*.
58
+ Otherwise raise a helpful ``ValueError`` that lists the closest matches.
59
+
60
+ Args:
61
+ obj : Any
62
+ The value to validate.
63
+ values : Iterable[Any]
64
+ The set of allowed values.
65
+ max_suggestions : int, optional
66
+ How many typo-hints to include at most (default 3).
67
+ cutoff : float, optional
68
+ Similarity threshold for suggestions (0.0-1.0, default 0.6).
69
+
70
+ Returns:
71
+ The original *obj* if it is valid.
72
+
73
+ Raises:
74
+ ValueError: With a friendly message that points out possible typos.
75
+ """
76
+ # Normalise to a list so we can reuse it
77
+ value_list = list(values)
78
+
79
+ if obj in value_list:
80
+ return obj
81
+
82
+ # Build suggestions
83
+ str_values = list(map(str, value_list))
84
+ matches = get_close_matches(str(obj), str_values, n=max_suggestions, cutoff=cutoff)
85
+
86
+ msg = f"Invalid value {obj!r}. Allowed values: {value_list}"
87
+ if matches:
88
+ msg += f". Did you mean {', '.join(repr(m) for m in matches)}?"
89
+ raise ValueError(msg)
@@ -0,0 +1,146 @@
1
+ import os
2
+ from typing import Literal, Optional
3
+
4
+ from datasets import load_dataset as datasets_load_dataset
5
+ from fusion_bench.utils import validate_and_suggest_corrections
6
+
7
+ try:
8
+ from modelscope import snapshot_download as modelscope_snapshot_download
9
+ except ImportError:
10
+
11
+ def modelscope_snapshot_download(*args, **kwargs):
12
+ raise ImportError(
13
+ "ModelScope is not installed. Please install it using `pip install modelscope` to use ModelScope models."
14
+ )
15
+
16
+
17
+ try:
18
+ from huggingface_hub import snapshot_download as huggingface_snapshot_download
19
+ except ImportError:
20
+
21
+ def huggingface_snapshot_download(*args, **kwargs):
22
+ raise ImportError(
23
+ "Hugging Face Hub is not installed. Please install it using `pip install huggingface_hub` to use Hugging Face models."
24
+ )
25
+
26
+
27
+ __all__ = [
28
+ "load_dataset",
29
+ "resolve_repo_path",
30
+ ]
31
+
32
+ AVAILABLE_PLATFORMS = ["hf", "huggingface", "modelscope"]
33
+
34
+
35
+ def load_dataset(
36
+ name: str,
37
+ split: str = "train",
38
+ platform: Literal["hf", "huggingface", "modelscope"] = "hf",
39
+ ):
40
+ """
41
+ Load a dataset from Hugging Face or ModelScope.
42
+
43
+ Args:
44
+ platform (Literal['hf', 'modelscope']): The platform to load the dataset from.
45
+ name (str): The name of the dataset.
46
+ split (str): The split of the dataset to load (default is "train").
47
+
48
+ Returns:
49
+ Dataset: The loaded dataset.
50
+ """
51
+ validate_and_suggest_corrections(platform, AVAILABLE_PLATFORMS)
52
+ if platform == "hf" or platform == "huggingface":
53
+ return datasets_load_dataset(name, split=split)
54
+ elif platform == "modelscope":
55
+ dataset_dir = modelscope_snapshot_download(name, repo_type="dataset")
56
+ return datasets_load_dataset(dataset_dir, split=split)
57
+ else:
58
+ raise ValueError(
59
+ f"Unsupported platform: {platform}. Supported platforms are 'hf', 'huggingface', and 'modelscope'."
60
+ )
61
+
62
+
63
+ def resolve_repo_path(
64
+ repo_id: str,
65
+ repo_type: Optional[str] = "model",
66
+ platform: Literal["hf", "huggingface", "modelscope"] = "hf",
67
+ **kwargs,
68
+ ):
69
+ """
70
+ Resolve and download a repository from various platforms to a local path.
71
+
72
+ This function handles multiple repository sources including local paths, Hugging Face,
73
+ and ModelScope. It automatically downloads remote repositories to local cache and
74
+ returns the local path for further use.
75
+
76
+ Args:
77
+ repo_id (str): Repository identifier. Can be:
78
+ - Local file/directory path (returned as-is if exists)
79
+ - Hugging Face model/dataset ID (e.g., "bert-base-uncased")
80
+ - ModelScope model/dataset ID
81
+ - URL-prefixed ID (e.g., "hf://model-name", "modelscope://model-name").
82
+ The prefix will override the platform argument.
83
+ repo_type (str, optional): Type of repository to download. Defaults to "model".
84
+ Common values include "model" and "dataset".
85
+ platform (Literal["hf", "huggingface", "modelscope"], optional):
86
+ Platform to download from. Defaults to "hf". Options:
87
+ - "hf" or "huggingface": Hugging Face Hub
88
+ - "modelscope": ModelScope platform
89
+ **kwargs: Additional arguments passed to the underlying download functions.
90
+
91
+ Returns:
92
+ str: Local path to the repository (either existing local path or downloaded cache path).
93
+
94
+ Raises:
95
+ FileNotFoundError: If the repository cannot be found or downloaded from any platform.
96
+ ValueError: If an unsupported platform is specified.
97
+ ImportError: If required dependencies for the specified platform are not installed.
98
+
99
+ Examples:
100
+ >>> # Local path (returned as-is)
101
+ >>> resolve_repo_path("/path/to/local/model")
102
+ "/path/to/local/model"
103
+
104
+ >>> # Hugging Face model
105
+ >>> resolve_repo_path("bert-base-uncased")
106
+ "/home/user/.cache/huggingface/hub/models--bert-base-uncased/..."
107
+
108
+ >>> # ModelScope model with explicit platform
109
+ >>> resolve_repo_path("damo/nlp_bert_backbone_base_std", platform="modelscope")
110
+ "/home/user/.cache/modelscope/hub/damo/nlp_bert_backbone_base_std/..."
111
+
112
+ >>> # URL-prefixed repository ID
113
+ >>> resolve_repo_path("hf://microsoft/DialoGPT-medium")
114
+ "/home/user/.cache/huggingface/hub/models--microsoft--DialoGPT-medium/..."
115
+ """
116
+ # If it's a HuggingFace Hub model id, download snapshot
117
+ if repo_id.startswith("hf://") or repo_id.startswith("huggingface://"):
118
+ repo_id = repo_id.replace("hf://", "").replace("huggingface://", "")
119
+ platform = "hf"
120
+ # If it's a ModelScope model id, download snapshot
121
+ elif repo_id.startswith("modelscope://"):
122
+ repo_id = repo_id.replace("modelscope://", "")
123
+ platform = "modelscope"
124
+
125
+ # If it's a local file or directory, return as is
126
+ if os.path.exists(repo_id):
127
+ return repo_id
128
+
129
+ try:
130
+ validate_and_suggest_corrections(platform, AVAILABLE_PLATFORMS)
131
+ # This will download the model to the cache and return the local path
132
+ if platform in ["hf", "huggingface"]:
133
+ local_path = huggingface_snapshot_download(
134
+ repo_id=repo_id, repo_type=repo_type, **kwargs
135
+ )
136
+ elif platform == "modelscope":
137
+ local_path = modelscope_snapshot_download(
138
+ repo_id=repo_id, repo_type=repo_type, **kwargs
139
+ )
140
+ else:
141
+ raise ValueError(
142
+ f"Unsupported platform: {platform}. Supported platforms are 'hf', 'huggingface', and 'modelscope'."
143
+ )
144
+ return local_path
145
+ except Exception as e:
146
+ raise FileNotFoundError(f"Could not resolve checkpoint: {repo_id}. Error: {e}")
@@ -4,6 +4,7 @@ from typing import Callable, Dict, List, Literal, Union, cast
4
4
 
5
5
  import torch
6
6
  from torch import Tensor
7
+ from tqdm.auto import tqdm
7
8
 
8
9
  from .parameters import check_parameters_all_equal
9
10
  from .type import BoolStateDictType, StateDictType
@@ -124,7 +125,11 @@ def state_dict_sub(
124
125
 
125
126
 
126
127
  def state_dict_add(
127
- a: StateDictType, b: StateDictType, strict: bool = True, device=None
128
+ a: StateDictType,
129
+ b: StateDictType,
130
+ strict: bool = True,
131
+ device=None,
132
+ show_pbar: bool = False,
128
133
  ):
129
134
  """
130
135
  Returns the sum of two state dicts.
@@ -140,10 +145,10 @@ def state_dict_add(
140
145
  ans = {}
141
146
  if strict:
142
147
  check_parameters_all_equal([a, b])
143
- for key in a:
148
+ for key in tqdm(tuple(a.keys())) if show_pbar else a:
144
149
  ans[key] = a[key] + b[key]
145
150
  else:
146
- for key in a:
151
+ for key in tqdm(tuple(a.keys())) if show_pbar else a:
147
152
  if key in b:
148
153
  ans[key] = a[key] + b[key]
149
154
  if device is not None:
@@ -175,7 +180,7 @@ def state_dict_mul(state_dict: StateDictType, scalar: float):
175
180
  return diff
176
181
 
177
182
 
178
- def state_dict_div(state_dict: StateDictType, scalar: float):
183
+ def state_dict_div(state_dict: StateDictType, scalar: float, show_pbar: bool = False):
179
184
  """
180
185
  Returns the division of a state dict by a scalar.
181
186
 
@@ -187,7 +192,7 @@ def state_dict_div(state_dict: StateDictType, scalar: float):
187
192
  Dict: The division of the state dict by the scalar.
188
193
  """
189
194
  diff = OrderedDict()
190
- for k in state_dict:
195
+ for k in tqdm(tuple(state_dict.keys())) if show_pbar else state_dict:
191
196
  diff[k] = state_dict[k] / scalar
192
197
  return diff
193
198
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fusion_bench
3
- Version: 0.2.18
3
+ Version: 0.2.20
4
4
  Summary: A Comprehensive Benchmark of Deep Model Fusion
5
5
  Author-email: Anke Tang <tang.anke@foxmail.com>
6
6
  License: MIT License
@@ -72,6 +72,14 @@ FusionBench is a benchmark suite designed to evaluate the performance of various
72
72
 
73
73
  Projects based on FusionBench and news from the community (descending order of date. If you have any work based on FusionBench, please feel free to let us know, we are willing to add it to the list. :partying_face:):
74
74
 
75
+ <details>
76
+ <summary>The-Hai Nguyen, Dang Huu-Tien, Takeshi Suzuki, and Le-Minh Nguyen. RegMean++: Enhancing Effectiveness and Generalization of Regression Mean for Model Merging. Aug, 2025. https://www.arxiv.org/abs/2508.03121</summary>
77
+
78
+ Regression Mean (RegMean), an approach that formulates model merging as a linear regression problem, aims to find the optimal weights for each linear layer in the merge model by minimizing the discrepancy in predictions between the merge and candidate models. RegMean provides a precise closed-form solution for the merging problem; therefore, it offers explainability and computational efficiency. However, RegMean merges each linear layer independently, overlooking how the features and information in the earlier layers propagate through the layers and influence the final prediction in the merge model. In this paper, we introduce RegMean++, a simple yet effective alternative to RegMean, that explicitly incorporates both intra- and cross-layer dependencies between merge models' layers into RegMean's objective. By accounting for these dependencies, RegMean++ better captures the behaviors of the merge model. Extensive experiments demonstrate that RegMean++ consistently outperforms RegMean across diverse settings, including in-domain (ID) and out-of-domain (OOD) generalization, sequential merging, large-scale tasks, and robustness under several types of distribution shifts. Furthermore, RegMean++ achieves competitive or state-of-the-art performance compared to various recent advanced model merging methods.
79
+
80
+ <img width="1000" alt="image" src="docs/algorithms/images/regmean_vs_regmean_plusplus.png">
81
+ </details>
82
+
75
83
  <details>
76
84
  <summary>Hao Mark Chen, et al. FW-Merging: Scaling Model Merging with Frank-Wolfe Optimization. Mar 2025. https://arxiv.org/abs/2503.12649</summary>
77
85
 
@@ -1,4 +1,4 @@
1
- fusion_bench/__init__.py,sha256=68dF-zPvb8E2MgYnmgIJsxIHJBy1MApKeOrRZvQEVlg,421
1
+ fusion_bench/__init__.py,sha256=vu3nMzKuiiHkbH13m8SOzj8qYU-n1PreBipWs_xjZig,1937
2
2
  fusion_bench/__main__.py,sha256=weUjxpP3ULnDgUxCehdbmoCM9cqfkhDhGB85tAF5qoE,81
3
3
  fusion_bench/compat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  fusion_bench/compat/method/__init__.py,sha256=A9pbskEYB4_ryD6sVrR0qI4eVYsbI7sExbhPeypP3fQ,5757
@@ -12,6 +12,7 @@ fusion_bench/compat/taskpool/base_pool.py,sha256=1AIZBxqUJgshq0Xo3Yo9es4b-8X8ksN
12
12
  fusion_bench/compat/taskpool/clip_image_classification.py,sha256=ZYZsbsE-fPzm6yafA0p-6wcDwVGryLmtXXtuEXeQbTY,7425
13
13
  fusion_bench/compat/taskpool/flan_t5_glue_text_generation.py,sha256=JsdAE72V1C1eDcA1WCa0PIcSDTrGPclNKFDQ9G-hYts,5786
14
14
  fusion_bench/constants/__init__.py,sha256=Pyc4dLbl6oNduOCdnpeXQ9LDyVoIrkdl9eZ_l2axIv8,41
15
+ fusion_bench/constants/banner.py,sha256=fuIO36ETKlS6a3wbwZn-rA2OswSCfOYyyhZ0Fnal1s4,1656
15
16
  fusion_bench/constants/clip_vision.py,sha256=k0NRfiacxRaswdxUj91-e3jcP1u-RmvsaaYdqohcQVU,310
16
17
  fusion_bench/constants/paths.py,sha256=DVZyQ9FLhkyUdw6ARpXUCAMf_B8hFyJ6UNI-oYly3pE,591
17
18
  fusion_bench/dataset/__init__.py,sha256=OJiYmcqz0Vm5O7mE4PB5QFJeL_KjrsseQTRsQATGTm4,1050
@@ -42,12 +43,12 @@ fusion_bench/dataset/llama/stanford_shp.py,sha256=6ueXKnFXIBBobacU1h5WxGLZrSOtBk
42
43
  fusion_bench/dataset/llama/ultrachat.py,sha256=Go7WvrDAYnm184fdazHGRYLbSY6Xd7jrESyQeUJtOww,1736
43
44
  fusion_bench/dataset/llama/wikitext.py,sha256=9ZHR-nMfXRumd3o-PIj3n7B83YlVeqpGkZ2zJs2B-9Y,2883
44
45
  fusion_bench/dataset/llama/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
- fusion_bench/method/__init__.py,sha256=TMELBu1IdKN86Id1rlNlr-vqsdArti_6mlKLfobHoL4,7888
46
+ fusion_bench/method/__init__.py,sha256=o8t4R4fSTVaYuv2c0uD0_5ZolGuRk3nLawanYZghoCk,8015
46
47
  fusion_bench/method/base_algorithm.py,sha256=UuITuGnSskcKEwUVINuPoWJUwqGm9AIgyQIOCu8BMks,1162
47
48
  fusion_bench/method/dummy.py,sha256=hb1y6LR_geRZ5eRgGwt5zJUcHYorCeIbs5i76CvurUc,1031
48
49
  fusion_bench/method/ensemble.py,sha256=rGxvJTeorfcBuE_e0XO-0-MAc9un7ZCC46ikKGuAcN4,3077
49
50
  fusion_bench/method/model_recombination.py,sha256=2tviqmYSPOL0_Ktv8_gt_YzQ4tyCANHxXquUot_3Cgo,5360
50
- fusion_bench/method/simple_average.py,sha256=vVzlfdf0mPHeY3VeOLrcWI4sWoLBW0gaX0lusjePVyQ,4539
51
+ fusion_bench/method/simple_average.py,sha256=omUIZn7VnrerAHbo9lNGUlL5EcpUeGv3C-fJczcXaOk,5458
51
52
  fusion_bench/method/ada_svd/__init__.py,sha256=4XzQbbvE9HI3NtEmEFvo8iC3ds_85vJXe7P7qJfL7kk,77
52
53
  fusion_bench/method/ada_svd/clip_vision.py,sha256=XvXgIdlShAREMsubRgphyycGrhWqSnuVBo6S9bNYSd0,12581
53
54
  fusion_bench/method/adamerging/__init__.py,sha256=nt0saBT_3bqghk-pINQ-XCWm9UWwSZllu4R1sDuAJAA,376
@@ -120,7 +121,7 @@ fusion_bench/method/linear/__init__.py,sha256=ChfkoOEAb-rUKwpowFPel-a1hRfS8gCrbn
120
121
  fusion_bench/method/linear/expo.py,sha256=LCHTWlsPm1Mjhrq0mfpWLVC7skkI9ZksGduy3TxULoU,3939
121
122
  fusion_bench/method/linear/linear_interpolation.py,sha256=IONw9BPiRJouY8bE9Abfyz7qVI_1B1n8KGZa0f7Pza8,2157
122
123
  fusion_bench/method/linear/llama_expo.py,sha256=ccECjhAqcFmzOIDyZ7e_aPzTM2Kj8u2D8TJytyz18YM,8476
123
- fusion_bench/method/linear/simple_average_for_llama.py,sha256=7JlVrmTMmrePvNGnZNoxSuCSq2Vu7cPQzjGC3WWUXBE,2079
124
+ fusion_bench/method/linear/simple_average_for_llama.py,sha256=ZbkTEgTNYBq8p3q_cxA6gky0mdZs7FaGfHlZKfFEbiQ,2952
124
125
  fusion_bench/method/linear/task_arithmetic_for_llama.py,sha256=4SZpiTD7OzhWUXtcdK3PYdXbBGyDqiZd7oZOQ0lraN0,1963
125
126
  fusion_bench/method/lm_finetune/__init__.py,sha256=IFGAqXujX3Fabzl_tC6zZyOyPFJfVziL0qFtj5MVxj0,149
126
127
  fusion_bench/method/lm_finetune/bradley_terry_rm.py,sha256=ys_td1IeL3bzPTE0Cixlj2JooCaB7qseRwSDwroAk5A,18777
@@ -182,6 +183,9 @@ fusion_bench/method/regmean/__init__.py,sha256=VVqAkdHkb005Sc2XmeiedQYzb3q5aQNI8
182
183
  fusion_bench/method/regmean/clip_regmean.py,sha256=xhT7dYSCg9sPLL5ZUCCtcA-Ypw4PBHsOivrnz-3fDso,4931
183
184
  fusion_bench/method/regmean/gpt2_regmean.py,sha256=p2D3E8YAZsltsI6GM474UWNqPZfBqihLZ93ZLUpOJ_c,5565
184
185
  fusion_bench/method/regmean/regmean.py,sha256=IqkweSS4WXGbMquWaHWHijiZ6rMIaHfFSje8C8bbb6g,16587
186
+ fusion_bench/method/regmean_plusplus/__init__.py,sha256=TD_KeTGXkbsh7tIsFDAnTDmYSvkc1ii2HfYQeNCu58A,141
187
+ fusion_bench/method/regmean_plusplus/clip_regmean_plusplus.py,sha256=s0HMUHTg6MV8B_WnF6D8LHRhrbr9aHChxMhnDj8qweE,7385
188
+ fusion_bench/method/regmean_plusplus/regmean_plusplus.py,sha256=and0YbngsWdq3zLBPOqTkhsCxR4WI9FjuoDQbLQfR4M,16069
185
189
  fusion_bench/method/slerp/__init__.py,sha256=Wgl9gg01Xou6jyZeBRD98kRnB_dAADDaPqRTHoONx9o,59
186
190
  fusion_bench/method/slerp/slerp.py,sha256=2_n10REnRoV5DuwCC0bDX8RM3MLL4Q_5rZiU0hICw2w,3406
187
191
  fusion_bench/method/slerp/slerp_utils.py,sha256=vksRo6n7FqY7By9aqbwTL4XV3BjcU_GrUl_r85Kpfjc,3504
@@ -252,9 +256,9 @@ fusion_bench/modelpool/huggingface_gpt2_classification.py,sha256=j8nicVwtoLXY4RP
252
256
  fusion_bench/modelpool/lazy_state_dict_pool.py,sha256=HtEA85rqSCHfsIddI5sKDcZf5kSuHNwrb8fF1TUSTr0,652
253
257
  fusion_bench/modelpool/nyuv2_modelpool.py,sha256=btuXmYxwfjI6MnGakhoOf53Iyb9fxYH20CavGTrTcnA,1375
254
258
  fusion_bench/modelpool/causal_lm/__init__.py,sha256=F432-aDIgAbUITj4GNZS9dgUKKhaDMCbTeHB-9MecaQ,99
255
- fusion_bench/modelpool/causal_lm/causal_lm.py,sha256=dkumbKspfEJhp3gtlZC71zUutdfJOKpKZnHy5z97qbc,6727
259
+ fusion_bench/modelpool/causal_lm/causal_lm.py,sha256=7-mUWVGVsXyljH_06CmIyReClKx_xVjy5zeXTJcLQIk,8085
256
260
  fusion_bench/modelpool/clip_vision/__init__.py,sha256=3b9gN2bWUsoA1EmpitnIMnIlX7nklxbkn4WJ0QJtS2c,43
257
- fusion_bench/modelpool/clip_vision/modelpool.py,sha256=ADgzslXwYd95x42V26XvgS09WEKGfhH_AYuQmWKdT0w,5887
261
+ fusion_bench/modelpool/clip_vision/modelpool.py,sha256=eemYxDPCovbdKo1yr96UJqieWxr7l_n0rQHsJT4JMno,7117
258
262
  fusion_bench/modelpool/openclip_vision/__init__.py,sha256=QDmAitKqUwRygN9QncdS_kGWZdfTKL4uUifC8xh9c10,47
259
263
  fusion_bench/modelpool/openclip_vision/modelpool.py,sha256=2MieB4PMvg85DaiYu49m3BzuBjib1xozJHTpYyHhRTs,11102
260
264
  fusion_bench/modelpool/seq2seq_lm/__init__.py,sha256=FnfSMHcwNHDQEMdB2HdK4WphQ6MufsRLUkczuALjM4Q,57
@@ -342,7 +346,7 @@ fusion_bench/programs/__init__.py,sha256=oGoRp2TMI6ELxyfkeTg2h27hZJEDz9x31Asmvwv
342
346
  fusion_bench/programs/base_program.py,sha256=0dX_KcMWASo53pr-ldzfUBWIjEXy6oeDWZBrfc7FIk8,195
343
347
  fusion_bench/programs/fabric_fusion_program.py,sha256=978t9Fw9kvw-Il7rJLR2jNI1OfSxkhq1c5-5D4BgnYU,13813
344
348
  fusion_bench/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
345
- fusion_bench/scripts/cli.py,sha256=hw32XtmixFxYXwgAY7iRBMzma_XQjdf_FxPiXKL6dIc,1154
349
+ fusion_bench/scripts/cli.py,sha256=gjNghi2VSW2gg41bn-WjzSkmTE3pDLoFk9c61zLJNso,1154
346
350
  fusion_bench/scripts/imgui.py,sha256=r9Glbfbwu3JCsX9TKQFwcHarvwA_G7ff0jWBUPW1S1U,7613
347
351
  fusion_bench/scripts/nyuv2_mtl_train.py,sha256=W1C45R9NdF4O-UjCx1bUxRTdFE0-FlRpwJHZ5gY18rI,3602
348
352
  fusion_bench/scripts/webui.py,sha256=ryA-2leSnHcYA88tTAYzJGDhiljbi0vl1Fibejzndlw,14398
@@ -384,7 +388,7 @@ fusion_bench/tasks/clip_classification/fer2013.py,sha256=_oc2fdV308ywcb16rLZxBAd
384
388
  fusion_bench/tasks/clip_classification/flower102.py,sha256=p_JMs6HCCPZBKe7PTXt0WABsd-KcgmpBkxDSlJJaVVY,2096
385
389
  fusion_bench/tasks/clip_classification/food101.py,sha256=Oepvws5byGxrHswXt3ILG3UEPiZaFXYqK1yJqm1uYVE,1968
386
390
  fusion_bench/tasks/clip_classification/gtsrb.py,sha256=Dsaz-XNz6oA9nNTF2C2iXmmhhVz-gsw-WcGuFTqjzl4,2677
387
- fusion_bench/tasks/clip_classification/imagenet.py,sha256=Az7gnFuecVCDkP3mMjiLwOgrYAf_cxz177kkdivComU,38815
391
+ fusion_bench/tasks/clip_classification/imagenet.py,sha256=EhZ2iYAc8oApr5BU_vgM3cDY879anTkvb-5hfi-B7m4,48826
388
392
  fusion_bench/tasks/clip_classification/kmnist.py,sha256=Ohce6aVaXkPnviDaZYXANMhhBNHZXO3FnXYxYG-ISVg,311
389
393
  fusion_bench/tasks/clip_classification/mnist.py,sha256=-gQpHz_kCXmUOtAsM8FBUYFjlwcbAgnqpuVtRfCJ3JM,129
390
394
  fusion_bench/tasks/clip_classification/mongo_leaf_disease.py,sha256=L_2IgnzbZdGZrX27VNGu1rC-N3Aj4fetIXB9HM1QZkI,519
@@ -417,15 +421,16 @@ fusion_bench/utils/hydra_utils.py,sha256=TklUDKDEZlg4keI-TEZiqh4gFjr9-61Rt1RMlqk
417
421
  fusion_bench/utils/instantiate_utils.py,sha256=57D8YP25OO-ArltOSsHDKtnNcA44m1yAq-1wKZc2YVI,17523
418
422
  fusion_bench/utils/json.py,sha256=sVCqbm9mmyHybiui-O57KFt_ULrjLtN2wipSo6VDvqE,2533
419
423
  fusion_bench/utils/lazy_imports.py,sha256=v5l9cpHXPMaz1IVBmB5oOqefYr9vA3XvP340xT7Wy18,2796
420
- fusion_bench/utils/lazy_state_dict.py,sha256=xb_NM4F653_HiPK8OClG3oTPuPk4SaarfCtLLg87Yi8,13347
421
- fusion_bench/utils/misc.py,sha256=Rgec7eKcGIcp9BaFVdm2pzx0J-L8AyX5qWuiYNTGvTc,530
424
+ fusion_bench/utils/lazy_state_dict.py,sha256=Hu8PkhbJcUikXJxWUJ7vabu2uDbnUUF6UsRS0k8i71U,16841
425
+ fusion_bench/utils/misc.py,sha256=93q0m-HYWkPK91Co5lll_J0Dxs6YahW2lD_X8fUAyTk,2420
426
+ fusion_bench/utils/modelscope.py,sha256=EZfvP6ExpagQXX2s0mbyE_yfmMHntQwvBN9taznnRmE,5705
422
427
  fusion_bench/utils/packages.py,sha256=L64paDi1SmeT3gRvRV6LaqB8AeGdzIYWIRI31qSQbSk,2110
423
428
  fusion_bench/utils/parameters.py,sha256=2vs8vo2o-nRA9NOMOYFye-X8-aHQZoYe54tM6n0r0RE,11757
424
429
  fusion_bench/utils/path.py,sha256=hRA1CPHNnTYBUmzbftH77sHvn4aTuybEK5Tth1skP-k,531
425
430
  fusion_bench/utils/pylogger.py,sha256=amlRsdqHpOjxmBl6f9TA8y0LaWelEWgQNcGgEGsVOIc,3333
426
431
  fusion_bench/utils/rich_utils.py,sha256=B8DhAYuVp23pG6ZnnYrUhcL-ikHZoQeTNqlM7u4pwwU,5786
427
432
  fusion_bench/utils/set.py,sha256=_43ZvGKJ_BK9sUslsSNhi7xEfuAQuyj3vViImnGpnCY,134
428
- fusion_bench/utils/state_dict_arithmetic.py,sha256=iz5YYhMJpg2-lBLBY8E1onV4i_GkRhJOGn2DjhLBbYE,11390
433
+ fusion_bench/utils/state_dict_arithmetic.py,sha256=7iWb9cy-eYJgiltGJXnVCrLoNHfIMXZEL_AOg6OY0dw,11613
429
434
  fusion_bench/utils/tensorboard.py,sha256=9fkgNYR9LM38nPNkudcxL9TjLUseW-280M0k2nLff7o,1669
430
435
  fusion_bench/utils/timer.py,sha256=RC2hP8JqaibdL0FnRyUCBRf4m7CXyfn5tE16zBWZ7hg,1338
431
436
  fusion_bench/utils/type.py,sha256=2iu8PQzSzI2KopYwg4Pay7qpq7s_LKkl6Rhj-tjG3u0,630
@@ -436,7 +441,7 @@ fusion_bench/utils/plot/token_notebook.py,sha256=bsntXf46Zz_RavTxNiB9c3-KvHw7LFw
436
441
  fusion_bench/utils/strenum/__init__.py,sha256=id9ORi1uXrDxhbmVxitJ1KDwLS4H3AAwFpaK5h1cQzw,8531
437
442
  fusion_bench/utils/strenum/_name_mangler.py,sha256=o11M5-bURW2RBvRTYXFQIPNeqLzburdoWLIqk8X3ydw,3397
438
443
  fusion_bench/utils/strenum/_version.py,sha256=6JQRo9LcvODbCOeVFYQb9HNJ_J9XiG_Zbn8ws2A3BV8,18466
439
- fusion_bench-0.2.18.dist-info/licenses/LICENSE,sha256=nhnOJlw4CPuPVE0qvkGmxfFgHmKi-6nzXvTu8t0NUdg,1066
444
+ fusion_bench-0.2.20.dist-info/licenses/LICENSE,sha256=nhnOJlw4CPuPVE0qvkGmxfFgHmKi-6nzXvTu8t0NUdg,1066
440
445
  fusion_bench_config/README.md,sha256=Lc8YSBJ5oxf9KV5kKDivJ9LRyGuraGQPmBbgbdVA-j4,703
441
446
  fusion_bench_config/clip-vit-base-patch32_robustness_corrupted.yaml,sha256=7IxLQoLRz-sRWyV8Vqc5kQcmYE_9YQz2_77pmvAkum8,1207
442
447
  fusion_bench_config/fabric_model_fusion.yaml,sha256=YwJx_aUXm4ca4_mVItKVUOesMvmBBRGudQIOqgc1EP8,974
@@ -621,9 +626,10 @@ fusion_bench_config/method/randes/superposed_model_soup.yaml,sha256=7M9qV_wCgrE3
621
626
  fusion_bench_config/method/randes/superposed_task_arithmetic.yaml,sha256=Pw0pZtwoMIPiqHfFNbN8wqNDyYb4L5p6fIOaaDSzJQg,498
622
627
  fusion_bench_config/method/randes/superposed_task_arithmetic_lora.yaml,sha256=xH8IkGnjvKLEWsms64toWhOrKIJG9dYfqQGOsVT4GDc,539
623
628
  fusion_bench_config/method/rankone_moe/rankone_moe.yaml,sha256=rYas_GFFHvn3AgKNrI0Zp4ElL9e3SppGPrFAMa_u9r8,863
624
- fusion_bench_config/method/regmean/clip_regmean.yaml,sha256=dxSJMRam6YMks7zYx4ACgvrLP5cndxzraVO93SGhyYo,425
629
+ fusion_bench_config/method/regmean/clip_regmean.yaml,sha256=QfkCHCLK9wbyB1Tq1S7YT3351MbWzOjUQiALE-EJBgw,426
625
630
  fusion_bench_config/method/regmean/gpt2_regmean.yaml,sha256=n94aTboDdwSA7Tki8l_o8tYQkhXxPV8lRf-dRNPIsOs,422
626
631
  fusion_bench_config/method/regmean/regmean.yaml,sha256=ZgVVLx-lHwVgjtjTl4VZUlthh8yyua87QvoJfmNHud4,101
632
+ fusion_bench_config/method/regmean_plusplus/clip_regmean_plusplus.yaml,sha256=A034ryEwvosqyQzA3KWs7kdp-3CUnoJtCujVywV-uzA,434
627
633
  fusion_bench_config/method/slerp/slerp.yaml,sha256=xldDUULtfCdwzAkQUb0C8-TmbW7FqcAlIOsPX8p4n6w,116
628
634
  fusion_bench_config/method/smile_upscaling/singular_projection_merging.yaml,sha256=ZMn_ImRjjc2uozf7ocQIzbgvFDpBV7S-34KptbBXVGo,200
629
635
  fusion_bench_config/method/smile_upscaling/smile_mistral_upscaling.yaml,sha256=VFMrkbO69d0wCjTQCuKysYGVe6hEwNu792g1QkhU5Mk,383
@@ -759,21 +765,21 @@ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch16_TA8_lora
759
765
  fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch16_TA8_model_only.yaml,sha256=4_fQ7O6vUzIxLe-3mfY6qapx1rg5icQe_ODCbMspVRU,236
760
766
  fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch16_TALL14.yaml,sha256=jBFj9O84KGWOwAI8a_In3Cq_C2caNE7JPYxhKaVDjsE,508
761
767
  fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch16_TALL14_model_only.yaml,sha256=fvebppOvcZkVQfsCRllZzEU3ifbes4y7PHqS_gy0SYY,384
762
- fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch16_TALL20.yaml,sha256=flHk78v6C4YzuT7pBJyQ0TT4U_ALXT9wWZb1iQnMPBk,508
763
- fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch16_TALL20_model_only.yaml,sha256=qnps2pbmcRbWEMZv506cspQ2Fuerj_1dsZtnsccD0RQ,384
768
+ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch16_TALL20.yaml,sha256=oPsGZjPxfb9wqmKzZv9MFeZNCtTh1AOY-01GK5fxMA4,2454
769
+ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch16_TALL20_model_only.yaml,sha256=pYoIPL2ebZGv7_dUQZQCDFVlU68K_VqUHQU0asYccmA,1384
764
770
  fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch16_individual.yaml,sha256=-jdB4ctj_NJcgbdYgog2-cighUSufAfpUvMOrGDblog,547
765
771
  fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch16_individual_lora.yaml,sha256=si8oNdCzCE_UDsHevyPGXxcJ0IZfRWHrrykHryazIvY,435
766
- fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TA8.yaml,sha256=1oY5QXG7flQq1990eN8GyjS1kak-dLPZIusV_dYyJVo,250
767
- fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TA8_control_task.yaml,sha256=5-g4DRsD5RBr8As6mDD9V8pT1JxKKPIUjwK8O7vBOMQ,688
768
- fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TA8_model_only.yaml,sha256=NdefoS2vRA4byRgjwKh8OplRJB48vg3jaeYiSjwQfAQ,108
769
- fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TALL10.yaml,sha256=uAVyNQQT16-oVB9CvxBNyoArni-giZDqkDPQogeJnP0,380
770
- fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TALL12.yaml,sha256=K5AWiFweGQ9CxQ0Wk-1ucfAs25WFFcWtpFEiio521rI,380
771
- fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TALL14.yaml,sha256=cmHBQY4zl4ySRJ5n11MIOzLERjPyxaFk1DGWFlrn-zQ,380
772
- fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TALL14_model_only.yaml,sha256=_2t8TV9T7BAiQda5fKCRIryTPg3XHYEM3hQUJqD1lXs,256
773
- fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TALL16.yaml,sha256=7Z4UVw3ManuEOw1D242UHn9uOv0LqUh2-uZt1M3718E,380
774
- fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TALL18.yaml,sha256=gGVJbI9LqenrGlFL3OCIqUxpf8IGM5GaXajgi9qVe1Y,380
775
- fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TALL20.yaml,sha256=V-p1JLhNwILgR0F4i6l8oOEQvZcYxs3J0Ly0VeAJY48,380
776
- fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TALL20_model_only.yaml,sha256=xYr0g5mdv0wly5HkTcnLq5yG6Mjj78XB7fGaCTk5KEc,256
772
+ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TA8.yaml,sha256=FUJYnr8pRVYEKoPLGrgGf6FH7ctbpCntG1YSYQV130Q,1013
773
+ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TA8_control_task.yaml,sha256=5nq8kWxu6rc5LJ83yVtzbTqaaLol_lymkbePVmGFo94,667
774
+ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TA8_model_only.yaml,sha256=vz1rmOT-bt56eDmWLT21NFq-Si_qE8EHcbWWi67VbGE,568
775
+ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TALL10.yaml,sha256=rwbWzJnWmVNiwxfyNFDVc-5neIZToQm9N1VZLBt55Kk,1290
776
+ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TALL12.yaml,sha256=vSiHAIRJI-p7V8u2BS45f20AfIPccjFZ2oImGUFvytg,1742
777
+ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TALL14.yaml,sha256=VfrDzBIDRZcBXl1PwRiB04HcvwEARAIweHvlGGNhNmk,1902
778
+ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TALL14_model_only.yaml,sha256=xh2lwb8sKMqdd6VZNj1lA2r063XXtQG0vUCXv76slNQ,1048
779
+ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TALL16.yaml,sha256=qHUHlJCfYm1oxgb4gzaS0BBQ5akmdAO8g1kvO2FPxCw,2066
780
+ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TALL18.yaml,sha256=383zCvjWgs5VmwBKWXcHfqqO8Fk75tD7IyhcvJ590ZU,2270
781
+ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TALL20.yaml,sha256=YRv9FFqWnY4yOEtEAL91TRf2xgPB8P7Y0CAOgtX31Kk,2454
782
+ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_TALL20_model_only.yaml,sha256=gEHHb4LVHUteJ-MKlupbZXktff6_wvGVL0CLv4cfrk0,1385
777
783
  fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_cars_and_dtd.yaml,sha256=V93v7cjxF0ZPJj0wX76Q-hSNvolUaTtoeWuAImSU53g,524
778
784
  fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_generalization_exp1.yaml,sha256=2WtCV1cJEEK3R-t4Tf-YB1AIZl-d0FkE6C0CsUBm9fw,625
779
785
  fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_generalization_exp2.yaml,sha256=BmQ0JP8Oa5_V5pJ55nJS1xR-OIPmvySSqQ36l2jAB1w,625
@@ -781,20 +787,21 @@ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_individu
781
787
  fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_mtl.yaml,sha256=pQr8lF-hIFrPXPcZYlbSxx8PF8EClZ6nm2L4yqEmHTk,176
782
788
  fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_robustness_clean.yaml,sha256=7oQtoqXs37fctajb6E7UOB0GT515eEGzFNm93dWOKKk,509
783
789
  fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_robustness_corrupted.yaml,sha256=txMh1k0O3Spusqewp7zV0N0L9e2fg87lviDEnNJSHGQ,900
784
- fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_single_finetuned.yaml,sha256=SBTyUX3wJwzdCTvZsW14FqaQP5r_nHPvusggGzP9P4o,148
785
- fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_single_task_projection.yaml,sha256=urlcrY5TEDOFJqYYmbaIY2Mi6_jIRdECnqo1gXWnPyU,390
786
- fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_sun397_and_cars.yaml,sha256=kC_DbHgZoC6p2-26e-jtjMS9mxyHMT-_B684UNQ59vo,533
787
- fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_sun397_and_dtd.yaml,sha256=BeF2ygrcElkvPlUo9LV9XxBO1Y75XxDSSS52cU-gNq4,503
788
- fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_sun397_cars_and_dtd.yaml,sha256=Dl08CAHcqbUPZkOYTAycJ_clkAPvkDSpxPxsY0uz54o,591
789
- fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_svhn_and_mnist.yaml,sha256=fYthV8iwRvF-b4-OCIFW1Rud-BVoLx4Oo3DzVszfqek,175
790
- fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_two_tasks_control_task.yaml,sha256=5uw3lD-bdHNQ76osDb0SBnzsdWABw08HYtUkDG-jioI,477
791
- fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-large-patch14_TA8.yaml,sha256=-Tt_YggxkuIGT4_q5FR16zPvW2wWhGJ5LL8omxvHjvw,380
792
- fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-large-patch14_TA8_model_only.yaml,sha256=PrDQr04UnhAciDrdtUutx-prMxF1Cs4jrEar7uJ-1Es,238
790
+ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_single_finetuned.yaml,sha256=nm22fkXYUGAgZ39N2AzSE4CUVaODHgi8HTIxBWuTz3M,240
791
+ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_single_task_projection.yaml,sha256=i78xIL-vP28dYZaXntLsm7e9IdI2yAeUwZZze5fd9Do,288
792
+ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_sun397_and_cars.yaml,sha256=gDEzNfwsMtIu2xH8WSIUblx4ZyL1FsLXoSEpXPHiMaI,482
793
+ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_sun397_and_dtd.yaml,sha256=Ej1NOsPJzLVZmBI9jK3QMhZg198IqThUZwt8_6GizUM,442
794
+ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_sun397_cars_and_dtd.yaml,sha256=V1KSVfjY0hqbJFnnOkoe7SD3qKBWmYyx2fqrLTX05bE,548
795
+ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_svhn_and_mnist.yaml,sha256=jOTbHpyqBVepW7KhorStMjH9cVzHZvq6K7osgYnsVIU,443
796
+ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-base-patch32_two_tasks_control_task.yaml,sha256=dFVylgWlqWWW_Hh0N7b1m5A8WYK-r-tO7TxEviR5dCY,382
797
+ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-large-patch14_TA8.yaml,sha256=ZuH1oweRcl08OeXNIxsb68PxYwdrUfliaHYa4s64ljo,939
798
+ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-large-patch14_TA8_model_only.yaml,sha256=LmILwWINU8cRVvxx3IKZPFcAzPyMnr8OlCJ0TDs1WMg,573
793
799
  fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-large-patch14_TALL14.yaml,sha256=TyF7CKXpBOiDoLtDVvZuBzPI9gEJo_c99j3Gwkl3FWw,510
794
800
  fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-large-patch14_TALL14_model_only.yaml,sha256=i5XGxa2FoW2464R4k5AG-7r5qmzjHXkCSm1Om2cshik,386
795
- fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-large-patch14_TALL20.yaml,sha256=yC2U_IoBAhawgSahY_mdi7ea5kJ2SSRPJ2FM-bA-E9M,510
796
- fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-large-patch14_TALL20_model_only.yaml,sha256=a2nviqKSRNoQScYVbj5buq0PbUzmYJwNWdPBUoLaeV8,386
797
- fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-large-patch14_individual.yaml,sha256=G6yvZuWOKb75RLn6tu2LPnwHUyvoxPfL_wqb_B11aZo,549
801
+ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-large-patch14_TALL20.yaml,sha256=FuPWQbC9xEV5wZjuo835gOMNgbzmpK9RbjFjA_HOzqo,2476
802
+ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-large-patch14_TALL20_model_only.yaml,sha256=9PCkbrNnQSKTsm4eoUvVgjGd3IY7wHBC4LWj4kOdY4Y,1406
803
+ fusion_bench_config/modelpool/CLIPVisionModelPool/clip-vit-large-patch14_individual.yaml,sha256=bqnyzgwIvDtV3Fb-uLf9mdFv0NW1C392lxGsGUPLsKE,400
804
+ fusion_bench_config/modelpool/CausalLMPool/Qwen2.5-1.5B_math_and_coder.yaml,sha256=HZXjqbZKpSZCHb-G8qjj03PcvXg_8mrAuewDHZp0oEw,263
798
805
  fusion_bench_config/modelpool/CausalLMPool/deepseek-v2-lite.yaml,sha256=8gr8ZtgegSHV0GHtJBiEgdYbRe8UHhO4_y8dayxZChk,506
799
806
  fusion_bench_config/modelpool/CausalLMPool/llama_alpaca_cleaned.yaml,sha256=oDsZkuAoh1mWUC7jZNzw8794zgX2bV5Z0esXpvbTs-c,643
800
807
  fusion_bench_config/modelpool/CausalLMPool/llama_codealpaca.yaml,sha256=FuUsBrvk3_bQiciMRlNsO5vp6AKHQM_-g-8bmU8251w,641
@@ -875,8 +882,8 @@ fusion_bench_config/taskpool/LMEvalHarnessTaskPool/lm_eval.yaml,sha256=3q-KMuFaM
875
882
  fusion_bench_config/taskpool/OpenCLIPVisionModelTaskPool/ViT-B-16_TA8.yaml,sha256=GjpiiRownrBCpl-TNwWRW2PYePbF-Cl99jlLNPrK5T4,1017
876
883
  fusion_bench_config/taskpool/OpenCLIPVisionModelTaskPool/ViT-B-32_TA8.yaml,sha256=WwiYMQKehtJixDPnu5o3vcWe4yJksXTWRqOzm3uVWXQ,1017
877
884
  fusion_bench_config/taskpool/OpenCLIPVisionModelTaskPool/ViT-L-14_TA8.yaml,sha256=xGRt0J9joXTzWUew6DvoYprAWlPXhaVFw5AX4im5VQw,1017
878
- fusion_bench-0.2.18.dist-info/METADATA,sha256=igyW5oJQzJfuEagCgyNbi0MvXp-Rz56u3FPtIHJFG5Y,21966
879
- fusion_bench-0.2.18.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
880
- fusion_bench-0.2.18.dist-info/entry_points.txt,sha256=iUQ8MCJvda7HP4vYh2n1Teoapb4G9PBVYZkAfcc5SHU,116
881
- fusion_bench-0.2.18.dist-info/top_level.txt,sha256=BuO4TL6iHL_2yPBUX9-LlIrHRczA_BNMIFwweK0PQEI,13
882
- fusion_bench-0.2.18.dist-info/RECORD,,
885
+ fusion_bench-0.2.20.dist-info/METADATA,sha256=fa8CMvPeD8fg_R8YuvjM_AggXMAVsqg63fZy3I4TMmc,23634
886
+ fusion_bench-0.2.20.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
887
+ fusion_bench-0.2.20.dist-info/entry_points.txt,sha256=iUQ8MCJvda7HP4vYh2n1Teoapb4G9PBVYZkAfcc5SHU,116
888
+ fusion_bench-0.2.20.dist-info/top_level.txt,sha256=BuO4TL6iHL_2yPBUX9-LlIrHRczA_BNMIFwweK0PQEI,13
889
+ fusion_bench-0.2.20.dist-info/RECORD,,