大语言模子数据增强与模子蒸馏办理方案
配景在人工智能和自然语言处置惩罚范畴,大语言模子通过训练数百亿乃至上千亿参数,实现了出色的文本天生、翻译、总结等使命。然而,这些模子的训练和推理过程须要大量的盘算资源,使得它们的实际开辟应用资本非常高;其次,大规模语言模子的高能耗和长相应时间题目也限定了其在资源有限场景中的使用。模子蒸馏将大模子“知识”迁移到较小模子。通过模子蒸馏,可以在保存大部门性能的条件下,明显镌汰模子的规模,从而低沉盘算资源的斲丧,为更多的实际应用场景提供支持。本方案以通义千问2(Qwen2)大语言模子为根本,为您先容大语言模子数据增强和蒸馏办理方案的完备开辟流程。
1.预备指令数据
您可以参照数据格式要求和数据预备战略预备相应的训练数据集。
2.可选步调:使用指令增广模子举行指令增广
您在快速开始(QuickStart)中使用预置的指令增广模子,根据预备的数据集的指令语义信息,主动扩写更多相似的指令,指令增广有助于提拔大语言模子的蒸馏训练的泛化性。
3.可选步调:使用指令优化模子举行指令优化
您在快速开始(QuickStart)中使用预置的指令优化模子,将预备的数据集的指令(及增广的指令)举行优化精粹,指令优化有助于提拔大语言模子的语言天生本事。
4.摆设西席大语言模子天生对应复兴
您在快速开始(QuickStart)中使用预置的西席大语言模子对训练数据会合的指令天生复兴,从而将对应西席大模子的知识举行蒸馏
5.蒸馏训练较小的弟子模子
您在快速开始(QuickStart)中使用天生完成的指令-复兴数据集,蒸馏训练对应较小的弟子模子,用于实际的应用场景。
条件条件
在开始实验使用前,请确认您已完成以下预备工作:
[*] 已开通PAI(DLC、EAS)后付费,并创建默认工作空间,详情请拜见开通PAI并创建默认工作空间。
[*] 已创建OSS存储空间(Bucket),用于存储训练数据和训练得到的模子文件。关于怎样创建存储空间,详情请拜见控制台创建存储空间。
预备指令数据
数据预备战略
为了提拔模子蒸馏的有用性和稳固性,您可以参考以下战略预备数据:
[*] 您应该至少预备数百条数据,预备的数据多有助于提拔模子的效果。
[*] 预备的种子数据集的分布应该尽大概广泛且均衡。包罗使命场景分布广泛,数据输入输出长度应该包罗较短和较长的场景。如果数据不止一种语言,比方有中文和英文,应当确保语言分布较为均衡。
[*] 纵然是少量的非常数据也会对微调效果造成很大的影响。应当先使用基于规则的方式洗濯数据,过滤掉数据会合的非常数据。
数据格式要求
训练数据集格式要求为:JSON格式的文件,包罗instruction一个字段,为输入的指令,相应的指令数据示比方下:
[
{
"instruction": "在2008年金融危机期间,各国政府采取了哪些主要措施来稳定金融市场?"
},
{
"instruction": "在气候变化加剧的背景下,各国政府采取了哪些重要行动来推动可持续发展?"
},
{
"instruction": "在2001年科技泡沫破裂期间,各国政府采取了哪些主要措施来支持经济复苏?"
}
]
使用指令增广模子举行指令增广(可选步调)
指令增广是大语言模子提示工程(Prompt Engineering)的一种常见应用,用于主动增广用户提供的指令数据集,从而到达数据增强的作用,比方给定输入:
如何做鱼香肉丝?
如何准备GRE考试?
如果被朋友误会了怎么办?
模子输出类似如下效果:
教我如何做麻婆豆腐?
提供一个关于如何准备托福考试的详细指南?
如果你在工作中遇到了挫折,你会如何调整心态?
由于指令的多样性直接影响了大语言模子的的学习泛化性,举行指令增广能有用提拔终极产出弟子模子的效果。基于Qwen2基座模子,PAI提供了两款自研指令增广模子,分别为Qwen2-1.5B-Instruct-Exp和Qwen2-7B-Instruct-Exp,支持用于在PAI-QuickStart一键摆设。
摆设及调用指令增广模子服务
摆设模子服务
您可以按照以下使用步调,将指令增广模子摆设为EAS在线服务。
[*] 在PAI-QuickStart选择Qwen2-1.5B-Instruct-Exp或Qwen2-7B-Instruct-Exp模子,在模子摆设地区,体系已默认设置了模子服务信息和资源摆设信息,您也可以根据须要举行修改,参数设置完成后单击摆设按钮。
[*] 在计费提示对话框中,单击确定。
体系主动跳转到摆设使命页面,当状态为运行中时,体现服务摆设乐成。
调用模子服务
服务摆设乐成后,您可以使用API举行模子推理。详细使用方法参考5分钟使用EAS一键摆设LLM大语言模子应用。以下提供一个示例,展示怎样通过客户端发起Request调用:
[*] 获取服务访问所在和Token。
[*] 在服务详情页面,单击资源信息地区的检察调用信息。https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0LzhjODBmOGJiY2IxMTcyZjRiYzhlOGQ2ZDVlM2MzYWE1LnBuZw==https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvLTg5MjI0MjAxMjYxMjUzOTM2NTguZ2lm编辑
[*] 在调用信息对话框中,查询服务访问所在和Token,并生存到本地。
[*] 在终端中,实验如下代码调用服务。
import argparse
import json
import requests
from typing import List
def post_http_request(prompt: str,
system_prompt: str,
host: str,
authorization: str,
max_new_tokens: int,
temperature: float,
top_k: int,
top_p: float) -> requests.Response:
headers = {
"User-Agent": "Test Client",
"Authorization": f"{authorization}"
}
pload = {
"prompt": prompt,
"system_prompt": system_prompt,
"top_k": top_k,
"top_p": top_p,
"temperature": temperature,
"max_new_tokens": max_new_tokens,
"do_sample": True,
"eos_token_id": 151645
}
response = requests.post(host, headers=headers, json=pload)
return response
def get_response(response: requests.Response) -> List:
data = json.loads(response.content)
output = data["response"]
return output
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--top-k", type=int, default=50)
parser.add_argument("--top-p", type=float, default=0.95)
parser.add_argument("--max-new-tokens", type=int, default=2048)
parser.add_argument("--temperature", type=float, default=1)
parser.add_argument("--prompt", type=str, default="给我唱首歌。")
args = parser.parse_args()
prompt = args.prompt
top_k = args.top_k
top_p = args.top_p
temperature = args.temperature
max_new_tokens = args.max_new_tokens
host = "EAS HOST"
authorization = "EAS TOKEN"
print(f" --- input: {prompt}\n", flush=True)
system_prompt = "我希望你扮演一个指令创建者的角色。 你的目标是从【给定指令】中获取灵感,创建一个全新的指令。"
response = post_http_request(
prompt, system_prompt,
host, authorization,
max_new_tokens, temperature, top_k, top_p)
output = get_response(response)
print(f" --- output: {output}\n", flush=True)
批量实现指令增广
如果使用上述EAS在线服务,可以举行批量调用,实现批量指令增广。以下代码树模了怎样读取本身的json格式数据集,批量调用上面的模子接口举行数据增广。post_http_request和get_response函数界说与前述脚本类似。
import requests
import json
import random
from tqdm import tqdm
from typing import List
input_file_path = "input.json" # 输入文件名
with open(input_file_path) as fp:
data=json.load(fp)
total_size = 10 # 期望的扩展后的总数据量
pbar = tqdm(total=total_size)
while len(data) < total_size:
prompt = random.sample(data,1)["instruction"]
system_prompt = "我希望你扮演一个指令创建者的角色。 你的目标是从【给定指令】中获取灵感,创建一个全新的指令。"
top_k = 50
top_p = 0.95
temperature = 1
max_new_tokens = 2048
host = "EAS HOST"
authorization = "EAS TOKEN"
response = post_http_request(
prompt, system_prompt,
host, authorization,
max_new_tokens, temperature, top_k, top_p)
output = get_response(response)
temp = {
"instruction": output
}
data.append(temp)
pbar.update(1)
pbar.close()
output_file_path = "output.json" # 输出文件名
with open(output_file_path, 'w') as f:
json.dump(data, f, ensure_ascii=False)
您也可以使用PAI-Designer的LLM-指令扩充(DLC)组件零代码实现上一功能。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0LzlhNTc4MDM0NjkzMzIwYmYxMDcxZTlmMDI4YzNlYTI5LnBuZw==
使用指令优化模子举行指令优化(可选步调)
指令优化是大语言模子提示工程(Prompt Engineering)的另一种常见技能,用于主动优化用户提供的指令数据集,天生更加详细的指令。这些更详细的指令能让大语言模子输出更详细的复兴。以下给出输入大略和详细指令,Qwen2-7B-Instruct模子的输出对比,可以显着观察到指令的优化对模子输出明显的提拔作用。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0Lzg2OWNjZTg4MzNjNTU0OGUwZjI3ZWU5OGNhNWRiYjAwLnBuZw==
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0L2FkODZlNzJhNGQyM2NhOGVlNWZiNGE0ZTRmYjYxZjZiLnBuZw==
在指令优化模子中,给定输入:
如何做鱼香肉丝?
如何准备GRE考试?
如果被朋友误会了怎么办?
模子输出类似如下效果:
请提供一个详细的中国四川风味的鱼香肉丝的食谱。包括所需的具体材料列表(如蔬菜、猪肉和调料),以及详细的步骤说明。如果可能的话,还请推荐适合搭配这道菜的小菜和主食。
请提供一个详细的指导方案,包括GRE考试的报名、所需资料、备考策略和建议的复习资料。同时,如果可以的话,也请推荐一些有效的练习题和模拟考试来帮助我更好地准备考试。
请提供一个详细的指导,教我如何在被朋友误会时保持冷静和理智,并且有效地沟通来解决问题。请包括一些实用的建议,例如如何表达自己的想法和感受,以及如何避免误解加剧,并且建议一些具体的对话场景和情境,以便我能更好地理解和练习。
由于指令的详细性直接影响了大语言模子的的输出指令,举行指令优化能有用提拔终极产出弟子模子的效果。基于Qwen2基座模子,PAI提供了两款自研指令优化模子,分别为Qwen2-1.5B-Instruct-Refine和Qwen2-7B-Instruct-Refine,支持用于在PAI-QuickStart一键摆设。
摆设及调用指令优化模子服务
摆设模子服务
您可以按照以下使用步调,将指令增广模子摆设为EAS在线服务。
[*] 在PAI-QuickStart选择Qwen2-1.5B-Instruct-Refine或Qwen2-7B-Instruct-Refine模子,在模子摆设地区,体系已默认设置了模子服务信息和资源摆设信息,您也可以根据须要举行修改,参数设置完成后单击摆设按钮。
[*] 在计费提示对话框中,单击确定。
体系主动跳转到摆设使命页面,当状态为运行中时,体现服务摆设乐成。
调用模子服务
服务摆设乐成后,您可以使用API举行模子推理。详细使用方法参考5分钟使用EAS一键摆设LLM大语言模子应用。以下提供一个示例,展示怎样通过客户端发起Request调用:
[*] 获取服务访问所在和Token。
[*] 在服务详情页面,单击资源信息地区的检察调用信息。
[*] 在调用信息对话框中,查询服务访问所在和Token,并生存到本地。
[*] 在终端中,实验如下代码调用服务。
import argparse
import json
import requests
from typing import List
def post_http_request(prompt: str,
system_prompt: str,
host: str,
authorization: str,
max_new_tokens: int,
temperature: float,
top_k: int,
top_p: float) -> requests.Response:
headers = {
"User-Agent": "Test Client",
"Authorization": f"{authorization}"
}
pload = {
"prompt": prompt,
"system_prompt": system_prompt,
"top_k": top_k,
"top_p": top_p,
"temperature": temperature,
"max_new_tokens": max_new_tokens,
"do_sample": True,
"eos_token_id": 151645
}
response = requests.post(host, headers=headers, json=pload)
return response
def get_response(response: requests.Response) -> List:
data = json.loads(response.content)
output = data["response"]
return output
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--top-k", type=int, default=2)
parser.add_argument("--top-p", type=float, default=0.95)
parser.add_argument("--max-new-tokens", type=int, default=256)
parser.add_argument("--temperature", type=float, default=0.5)
parser.add_argument("--prompt", type=str, default="给我唱首歌。")
args = parser.parse_args()
prompt = args.prompt
top_k = args.top_k
top_p = args.top_p
temperature = args.temperature
max_new_tokens = args.max_new_tokens
host = "EAS HOST"
authorization = "EAS TOKEN"
print(f" --- input: {prompt}\n", flush=True)
system_prompt = "请优化这个指令,将其修改为一个更详细具体的指令。"
response = post_http_request(
prompt, system_prompt,
host, authorization,
max_new_tokens, temperature, top_k, top_p)
output = get_response(response)
print(f" --- output: {output}\n", flush=True)
批量实现指令优化
如果使用上述EAS在线服务,可以举行批量调用,实现批量指令优化。以下代码树模了怎样读取本身的json格式数据集,批量调用上面的模子接口举行指令优化。post_http_request和get_response函数界说与前述脚本类似。
import requests
import json
import random
from tqdm import tqdm
from typing import List
input_file_path = "input.json" # 输入文件名
with open(input_file_path) as fp:
data = json.load(fp)
pbar = tqdm(total=len(data))
new_data =[]
for d in data:
prompt = d["instruction"]
system_prompt = "请优化以下指令。"
top_k = 50
top_p = 0.95
temperature = 1
max_new_tokens = 2048
host = "EAS HOST"
authorization = "EAS TOKEN"
response = post_http_request(
prompt, system_prompt,
host, authorization,
max_new_tokens, temperature, top_k, top_p)
output = get_response(response)
temp = {
"instruction": output
}
new_data.append(temp)
pbar.update(1)
pbar.close()
output_file_path = "output.json" # 输出文件名
with open(output_file_path, 'w') as f:
json.dump(new_data, f, ensure_ascii=False)
您也可以使用PAI-Designer的LLM-指令优化(DLC)组件零代码实现上一功能。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0LzA5NGIyMTk0MDExYmUyMTE4ZTkzMzI5ZmY3MTBjODFiLnBuZw==
摆设西席大语言模子天生对应复兴
摆设模子服务
在优化好数据会合的指令以后,您可以按照以下使用步调,摆设西席大语言模子天生对应复兴。
[*] 在PAI-QuickStart选择通义千问2-72B-Instruct模子其他西席大模子,在模子摆设地区,体系已默认设置了模子服务信息和资源摆设信息,您也可以根据须要举行修改,参数设置完成后单击摆设按钮。
[*] 在计费提示对话框中,单击确定。
体系主动跳转到摆设使命页面,当状态为运行中时,体现服务摆设乐成。
调用模子服务
服务摆设乐成后,您可以使用API举行模子推理。详细使用方法参考5分钟使用EAS一键摆设LLM大语言模子应用。以下提供一个示例,展示怎样通过客户端发起Request调用:
[*] 获取服务访问所在和Token。
[*] 在服务详情页面,单击资源信息地区的检察调用信息。
[*] 在调用信息对话框中,查询服务访问所在和Token,并生存到本地。
[*] 在终端中,实验如下代码调用服务。
import argparse
import json
import requests
from typing import List
def post_http_request(prompt: str,
system_prompt: str,
host: str,
authorization: str,
max_new_tokens: int,
temperature: float,
top_k: int,
top_p: float) -> requests.Response:
headers = {
"User-Agent": "Test Client",
"Authorization": f"{authorization}"
}
pload = {
"prompt": prompt,
"system_prompt": system_prompt,
"top_k": top_k,
"top_p": top_p,
"temperature": temperature,
"max_new_tokens": max_new_tokens,
"do_sample": True,
}
response = requests.post(host, headers=headers, json=pload)
return response
def get_response(response: requests.Response) -> List:
data = json.loads(response.content)
output = data["response"]
return output
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--top-k", type=int, default=50)
parser.add_argument("--top-p", type=float, default=0.95)
parser.add_argument("--max-new-tokens", type=int, default=2048)
parser.add_argument("--temperature", type=float, default=0.5)
parser.add_argument("--prompt", type=str)
parser.add_argument("--system_prompt", type=str)
args = parser.parse_args()
prompt = args.prompt
system_prompt = args.system_prompt
top_k = args.top_k
top_p = args.top_p
temperature = args.temperature
max_new_tokens = args.max_new_tokens
host = "EAS HOST"
authorization = "EAS TOKEN"
print(f" --- input: {prompt}\n", flush=True)
response = post_http_request(
prompt, system_prompt,
host, authorization,
max_new_tokens, temperature, top_k, top_p)
output = get_response(response)
print(f" --- output: {output}\n", flush=True)
详细使用方法参考5分钟使用EAS一键摆设LLM大语言模子应用。
批量实现西席模子的指令标注
以下代码树模了怎样读取本身的json格式数据集,批量调用上面的模子接口举行西席模子标注。post_http_request和get_response函数界说与前述脚本类似。
import json
from tqdm import tqdm
import requests
from typing import List
input_file_path = "input.json" # 输入文件名
with open(input_file_path) as fp:
data = json.load(fp)
pbar = tqdm(total=len(data))
new_data = []
for d in data:
system_prompt = "You are a helpful assistant."
prompt = d["instruction"]
print(prompt)
top_k = 50
top_p = 0.95
temperature = 0.5
max_new_tokens = 2048
host = "EAS HOST"
authorization = "EAS TOKEN"
response = post_http_request(
prompt, system_prompt,
host, authorization,
max_new_tokens, temperature, top_k, top_p)
output = get_response(response)
temp = {
"instruction": prompt,
"output": output
}
new_data.append(temp)
pbar.update(1)
pbar.close()
output_file_path = "output.json" # 输出文件名
with open(output_file_path, 'w') as f:
json.dump(new_data, f, ensure_ascii=False)
蒸馏训练较小的弟子模子
当得到西席模子的复兴后,您可以在QuickStart中,实现弟子模子的训练,无需编写代码,极大简化了模子的开辟过程。本方案以Qwen2-7B-Instruct模子为例,为您先容怎样使用已预备好的训练数据,在QuickStart中举行模子训练。详细使用步调如下:
[*] 进入快速开始页面。
[*] 登录PAI控制台。
[*] 在顶部左上角根据实际环境选择地区。
[*] 在左侧导航栏选择工作空间列表,单击指定工作空间名称,进入对应工作空间内。
[*] 在左侧导航栏选择快速开始。
2.在快速开始页面右侧的模子列表中,单击通义千问2-7B-Instruct模子卡片,进入模子详情页面。
3.在模子详情页面,单击右上角的微调训练。
4.在微调训练设置面板中,设置以下关键参数,其他参数取默认设置。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0LzVkODQ0ZDQ1ZmMzMDFkNzhlZmQ0MWY3YTJjNGZhOGY4LnBuZw==
[*] 题目:<|im_end|>\n<|im_start|>user\n + instruction + <|im_end|>\n
[*] 答案:<|im_start|>assistant\n + output + <|im_end|>\n || system_prompt | true | string | 模子训练使用的体系提示语,默以为You are a helpful assistant |
点击“训练”按钮,PAI-QuickStart 开始举行训练,用户可以检察训练使命状态和训练日志。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0LzkyMTU4MjUyOGEzYjZkODJlZjhkM2M3OWVlNzdmMTM0LnBuZw==
如果在训练完成后,须要将模子摆设至PAI-EAS,可以在同一页面的模子摆设卡面选择资源组,而且点击“摆设”按钮实现一键摆设。
相干文档
[*] 更多关于EAS产物的内容先容,请拜见模子在线服务(EAS)。
[*] 使用快速开始(QuickStart)功能,您可以轻松完成更多场景的摆设与微调使命,包罗Llama-3、Qwen1.5、Stable Diffusion V1.5等系列模子。详情请拜见场景实践。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金
页:
[1]