|
--- |
|
tags: |
|
- merge |
|
license: other |
|
--- |
|
|
|
# QuartetAnemoi-70B-t0.0001 |
|
|
|
A sequential merge using a custom algorithm (NearSwap) of: |
|
- [152334H/miqu-1-70b-sf](https://huggingface.co/152334H/miqu-1-70b-sf) |
|
- [Sao10K/WinterGoddess-1.4x-70B-L2](https://huggingface.co/Sao10K/WinterGoddess-1.4x-70B-L2) |
|
- [Aurora-Nights-70B-v1.0](https://huggingface.co/sophosympatheia/Aurora-Nights-70B-v1.0) |
|
- [Xwin-LM-70B-V0.1](https://huggingface.co/Xwin-LM/Xwin-LM-70B-V0.1) |
|
|
|
<br/> |
|
|
|
In our testing, this model seems like a storyteller, as might be expected. We were impressed that, unlike most models, at the end of a story it did not often use cliches such as "In the end", "And so", "beacon of hope", etc. |
|
|
|
<br/> |
|
<br/> |
|
|
|
# NearSwap Algorithm |
|
|
|
NearSwap retains most of the weights of the base model (Miqu), but when a weight is similar between the two, it is interpolated to the secondary model value. A parameter *t* specifies the sameness threshold. When the distance between two values is below *t*, the weight from the secondary model is used. |
|
|
|
This version of the model uses *t* = 0.0001. At this *t*, about 0.8% of weights are fully switched to the secondary model during each pass. Model quality rapidly degrades above *t* = 0.0025: |
|
|
|
- *t* = 0.0001 (~0.8% full swap): This model |
|
- *t* = 0.0003 (~2% full swap) |
|
- *t* = 0.001 (~10% full swap): [BoreanGale-70B](https://huggingface.co/alchemonaut/BoreanGale-70B) |
|
- *t* = 0.0025 (~18% full swap): Generates one paragraph okay, but then reverts to garbage |
|
- *t* = 0.005 (~35% full swap): Garbage; semi-related word lists |
|
- *t* = 0.01 (~55% full swap): Garbage; pseudorandom tokens output |
|
|
|
For QuartetAnemoi-70B-t0.0001, the three secondary models were each merged sequentially with *t* = 0.0001. |
|
|
|
NearSwap implementation: |
|
``` |
|
t: Union[float, np.ndarray], |
|
v0: Union[np.ndarray, torch.Tensor], |
|
v1: Union[np.ndarray, torch.Tensor], |
|
... |
|
lweight = numpy.absolute(v0-v1) |
|
lweight = t / lweight |
|
lweight = numpy.nan_to_num(lweight, nan=1.0, posinf=1.0, neginf=1.0) |
|
numpy.clip(lweight, a_min=0.0, a_max=1.0, out=lweight) |
|
res = lerp(lweight,v0,v1) |
|
``` |
|
<br/> |
|
<br/> |
|
|
|
|
|
# License and Use |
|
|
|
Since the ultimate origin of Miqu is at this time unknown beyond speculation, this model is for noncommercial research use only. |
|
|
|
<br/> |
|
<br/> |
|
|