您的位置:首页 > 新闻 > 资讯 > 制作网站公司选 择乐云seo_网站设计公司哪家_seo营销的概念_整合营销什么意思

制作网站公司选 择乐云seo_网站设计公司哪家_seo营销的概念_整合营销什么意思

2025/3/10 15:24:03 来源:https://blog.csdn.net/x1131230123/article/details/146061676  浏览:    关键词:制作网站公司选 择乐云seo_网站设计公司哪家_seo营销的概念_整合营销什么意思
制作网站公司选 择乐云seo_网站设计公司哪家_seo营销的概念_整合营销什么意思

https://www.dong-blog.fun/post/1966

使用mergekit合并大型语言模型

在人工智能领域,模型合并是一种将多个大型语言模型(LLM)整合为单一模型的技术。这种方法不仅成本低廉(无需GPU),还能生成性能卓越的模型。本文将介绍如何使用mergekit库来实现模型合并,并详细讲解四种常用的合并方法:SLERP、TIES、DARE和Passthrough。最后,我们将通过实际操作创建一个名为Marcoro14-7B-slerp的模型,并将其上传至Hugging Face Hub。

1. 准备工作

首先,我们需要安装mergekit库。可以通过以下命令从GitHub直接安装:

!git clone https://github.com/cg123/mergekit.git
!cd mergekit && pip install -q -e .
2. 合并方法简介
SLERP(球面线性插值)

SLERP是一种在两个向量之间平滑插值的方法,适用于高维空间中的向量插值。它能够保持向量的几何特性,避免线性插值带来的向量长度缩减问题。

配置示例:

slices:- sources:- model: OpenPipe/mistral-ft-optimized-1218layer_range: [0, 32]- model: mlabonne/NeuralHermes-2.5-Mistral-7Blayer_range: [0, 32]
merge_method: slerp
base_model: OpenPipe/mistral-ft-optimized-1218
parameters:t:- filter: self_attnvalue: [0, 0.5, 0.3, 0.7, 1]- filter: mlpvalue: [1, 0.5, 0.7, 0.3, 0]- value: 0.5
dtype: bfloat16
TIES(任务特定模型合并)

TIES-Merging通过消除冗余参数和解决参数符号冲突,将多个任务特定模型合并为一个多任务模型。

配置示例:

models:- model: mistralai/Mistral-7B-v0.1- model: OpenPipe/mistral-ft-optimized-1218parameters:density: 0.5weight: 0.5- model: mlabonne/NeuralHermes-2.5-Mistral-7Bparameters:density: 0.5weight: 0.3
merge_method: ties
base_model: mistralai/Mistral-7B-v0.1
parameters:normalize: true
dtype: float16
DARE(随机权重重置与重缩放)

DARE通过随机重置微调权重并重缩放权重,将多个模型合并为一个。

配置示例:

models:- model: mistralai/Mistral-7B-v0.1- model: samir-fama/SamirGPT-v1parameters:density: 0.53weight: 0.4- model: abacusai/Slerp-CM-mist-dpoparameters:density: 0.53weight: 0.3- model: EmbeddedLLM/Mistral-7B-Merge-14-v0.2parameters:density: 0.53weight: 0.3
merge_method: dare_ties
base_model: mistralai/Mistral-7B-v0.1
parameters:int8_mask: true
dtype: bfloat16
Passthrough(层拼接)

Passthrough方法通过拼接不同模型的层,生成参数数量独特的模型。

配置示例:

slices:- sources:- model: OpenPipe/mistral-ft-optimized-1218layer_range: [0, 32]- sources:- model: mlabonne/NeuralHermes-2.5-Mistral-7Blayer_range: [24, 32]
merge_method: passthrough
dtype: bfloat16
3. 创建并上传模型

以下是一个完整的示例,展示如何使用SLERP方法合并两个模型,并将结果上传至Hugging Face Hub。

步骤:

  1. 定义合并配置:
import yamlMODEL_NAME = "Marcoro14-7B-slerp"
yaml_config = """
slices:- sources:- model: AIDC-ai-business/Marcoroni-7B-v3layer_range: [0, 32]- model: EmbeddedLLM/Mistral-7B-Merge-14-v0.1layer_range: [0, 32]
merge_method: slerp
base_model: AIDC-ai-business/Marcoroni-7B-v3
parameters:t:- filter: self_attnvalue: [0, 0.5, 0.3, 0.7, 1]- filter: mlpvalue: [1, 0.5, 0.7, 0.3, 0]- value: 0.5
dtype: bfloat16
"""# 保存配置为YAML文件
with open('config.yaml', 'w', encoding="utf-8") as f:f.write(yaml_config)
  1. 运行合并命令:
!mergekit-yaml config.yaml merge --copy-tokenizer --allow-crimes --out-shard-size 1B --lazy-unpickle
  1. 生成模型说明文件并上传:
!pip install -qU huggingface_hubfrom huggingface_hub import ModelCard, ModelCardData
from jinja2 import Templateusername = "mlabonne"template_text = """
---
license: apache-2.0
tags:
- merge
- mergekit
- lazymergekit
{%- for model in models %}
- {{ model }}
{%- endfor %}
---# {{ model_name }}{{ model_name }} is a merge of the following models using [mergekit](https://github.com/cg123/mergekit):{%- for model in models %}
* [{{ model }}](https://huggingface.co/{{ model }})
{%- endfor %}## 🧩 Configuration\```yaml
{{- yaml_config -}}
\```
"""# 创建Jinja模板对象
jinja_template = Template(template_text.strip())# 从配置中获取模型列表
data = yaml.safe_load(yaml_config)
if "models" in data:models = [data["models"][i]["model"] for i in range(len(data["models"])) if "parameters" in data["models"][i]]
elif "parameters" in data:models = [data["slices"][0]["sources"][i]["model"] for i in range(len(data["slices"][0]["sources"]))]
elif "slices" in data:models = [data["slices"][i]["sources"][0]["model"] for i in range(len(data["slices"]))]
else:raise Exception("No models or slices found in yaml config")# 填充模板
content = jinja_template.render(model_name=MODEL_NAME,models=models,yaml_config=yaml_config,username=username,
)# 保存模型说明文件
card = ModelCard(content)
card.save('merge/README.md')# 上传至Hugging Face Hub
from google.colab import userdata
from huggingface_hub import HfApiusername = "mlabonne"# 在Google Colab的Secrets标签中定义
api = HfApi(token=userdata.get("HF_TOKEN"))api.create_repo(repo_id=f"{username}/{MODEL_NAME}",repo_type="model"
)
api.upload_folder(repo_id=f"{username}/{MODEL_NAME}",folder_path="merge",
)
4. 模型测试与评估

合并完成后,可以通过以下代码在T4 GPU上测试模型:

!pip install -qU transformers acceleratefrom transformers import AutoTokenizer
import transformers
import torchmodel = "mlabonne/Marcoro14-7B-slerp"
messages = [{"role": "user", "content": "What is a large language model?"}]tokenizer = AutoTokenizer.from_pretrained(model)
prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
pipeline = transformers.pipeline("text-generation",model=model,torch_dtype=torch.float16,device_map="auto",
)outputs = pipeline(prompt, max_new_tokens=256, do_sample=True, temperature=0.7, top_k=50, top_p=0.95)
print(outputs[0]["generated_text"])
5. 总结

通过本教程,我们学习了如何使用mergekit库合并大型语言模型,并详细介绍了SLERP、TIES、DARE和Passthrough四种方法。最后,我们创建了一个名为Marcoro14-7B-slerp的模型,并将其上传至Hugging Face Hub。希望这篇教程能帮助你更好地理解和应用模型合并技术!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com