LilyWinter's picture
Update README.md
418438f verified
|
raw
history blame
2.38 kB
---
tags:
- merge
license: other
---
<img src=https://huggingface.co/alchemonaut/QuartetAnemoi-70B-t0.0001/resolve/main/anemoi.png>
# 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/>