mergekit:一个强大的语言模型融合工具包
mergekit 是一个用于融合预训练语言模型的强大工具包。它采用了一种创新的核外方法,能够在资源受限的情况下执行非常复杂的模型融合操作。mergekit 的融合过程可以完全在 CPU 上运行,也可以在仅有 8GB VRAM 的情况下通过 GPU 加速。该工具包支持多种融合算法,并且随着新算法的出现还会不断增加支持。
主要特性
mergekit 具有以下几个突出的特性:
-
广泛的模型支持:支持 Llama、Mistral、GPT-NeoX、StableLM 等多种模型架构。
-
丰富的融合方法:提供多种融合算法,包括线性融合、球面线性插值(SLERP)、任务向量算术、TIES、DARE 等。
-
灵活的硬件选择:可以在 GPU 或 CPU 上执行融合操作。
-
低内存使用:采用延迟加载张量的方式,大大降低了内存占用。
-
参数插值:支持参数值的插值梯度,灵感来自 Gryphe 的 BlockMerge_Gradient 脚本。
-
模型组装:支持从不同模型的层片段组装语言模型("Frankenmerging")。
-
专家混合(MoE)融合:支持将多个密集模型融合成专家混合模型。
-
LORA 提取:能够从微调模型中提取兼容 PEFT 的低秩近似。
-
进化融合方法:提供了一些基于进化算法的融合方法。
安装和使用
安装 mergekit 非常简单,只需克隆 GitHub 仓库并通过 pip 安装即可。安装完成后,用户可以使用 mergekit-yaml
脚本作为主要入口点来执行模型融合。该脚本接受一个 YAML 配置文件和一个输出路径作为参数。
融合配置
mergekit 使用 YAML 格式的配置文件来指定融合操作。配置文件中的主要元素包括:
merge_method
:指定使用的融合方法slices
或models
:定义要使用的模型层切片或整个模型base_model
:指定某些融合方法中使用的基础模型parameters
:包含各种参数,如权重和密度dtype
:指定融合操作使用的数据类型tokenizer_source
:确定如何为融合模型构建分词器
参数可以在不同层级指定,具有不同的优先级。这种灵活的参数指定方式允许用户对融合过程进行精细控制。
支持的融合方法
mergekit 支持多种融合方法,包括线性融合、SLERP、任务向量算术、TIES、DARE、Model Breadcrumbs 等。每种方法都有其特定的参数和适用场景。
其他功能
除了基本的模型融合,mergekit 还提供了一些额外的功能:
-
LORA 提取:可以从微调模型中提取兼容 PEFT 的低秩近似。
-
专家混合(MoE)融合:支持将多个密集模型融合成专家混合模型。
-
进化融合方法:提供了一些基于进化算法的融合方法。
-
云端融合:通过 Arcee 的云 GPU 服务,用户可以在云端执行模型融合。
总结
mergekit 是一个功能强大、灵活易用的语言模型融合工具包。它不仅支持多种融合方法和模型架构,还提供了低内存使用、灵活的参数控制等特性。无论是研究人员还是实践者,都可以利用 mergekit 来探索和实现各种模型融合策略,从而创造出性能更优、功能更强的语言模型。
markdown
## mergekit:一个强大的语言模型融合工具包
mergekit 是一个用于融合预训练语言模型的强大工具包。它采用了一种创新的核外方法,能够在资源受限的情况下执行非常复杂的模型融合操作。mergekit 的融合过程可以完全在 CPU 上运行,也可以在仅有 8GB VRAM 的情况下通过 GPU 加速。该工具包支持多种融合算法,并且随着新算法的出现还会不断增加支持。
### 主要特性
mergekit 具有以下几个突出的特性:
1. 广泛的模型支持:支持 Llama、Mistral、GPT-NeoX、StableLM 等多种模型架构。
2. 丰富的融合方法:提供多种融合算法,包括线性融合、球面线性插值(SLERP)、任务向量算术、TIES、DARE 等。
3. 灵活的硬件选择:可以在 GPU 或 CPU 上执行融合操作。
4. 低内存使用:采用延迟加载张量的方式,大大降低了内存占用。
5. 参数插值:支持参数值的插值梯度,灵感来自 Gryphe 的 BlockMerge_Gradient 脚本。
6. 模型组装:支持从不同模型的层片段组装语言模型("Frankenmerging")。
7. 专家混合(MoE)融合:支持将多个密集模型融合成专家混合模型。
8. LORA 提取:能够从微调模型中提取兼容 PEFT 的低秩近似。
9. 进化融合方法:提供了一些基于进化算法的融合方法。
### 安装和使用
安装 mergekit 非常简单,只需克隆 GitHub 仓库并通过 pip 安装即可。安装完成后,用户可以使用 `mergekit-yaml` 脚本作为主要入口点来执行模型融合。该脚本接受一个 YAML 配置文件和一个输出路径作为参数。
### 融合配置
mergekit 使用 YAML 格式的配置文件来指定融合操作。配置文件中的主要元素包括:
- `merge_method`:指定使用的融合方法
- `slices` 或 `models`:定义要使用的模型层切片或整个模型
- `base_model`:指定某些融合方法中使用的基础模型
- `parameters`:包含各种参数,如权重和密度
- `dtype`:指定融合操作使用的数据类型
- `tokenizer_source`:确定如何为融合模型构建分词器
参数可以在不同层级指定,具有不同的优先级。这种灵活的参数指定方式允许用户对融合过程进行精细控制。
### 支持的融合方法
mergekit 支持多种融合方法,包括线性融合、SLERP、任务向量算术、TIES、DARE、Model Breadcrumbs 等。每种方法都有其特定的参数和适用场景。
### 其他功能
除了基本的模型融合,mergekit 还提供了一些额外的功能:
1. LORA 提取:可以从微调模型中提取兼容 PEFT 的低秩近似。
2. 专家混合(MoE)融合:支持将多个密集模型融合成专家混合模型。
3. 进化融合方法:提供了一些基于进化算法的融合方法。
4. 云端融合:通过 Arcee 的云 GPU 服务,用户可以在云端执行模型融合。
### 总结
mergekit 是一个功能强大、灵活易用的语言模型融合工具包。它不仅支持多种融合方法和模型架构,还提供了低内存使用、灵活的参数控制等特性。无论是研究人员还是实践者,都可以利用 mergekit 来探索和实现各种模型融合策略,从而创造出性能更优、功能更强的语言模型。