火山引擎火山方舟平台微调SFT——赋予通用大模型深度思考能力
本文介绍如何使用火山引擎上的火山方舟平台对大模型进行微调,使大模型能够服务于特定的场景。这里主要演示了使用长 CoT 的推理数据对 doubao-lite-32k 进行监督微调(SFT),以使 doubao-lite 大模型具备类似 DeepSeek-R1 的深度思考和推理能力。
本文介绍如何使用火山引擎上的火山方舟平台对大模型进行微调,使大模型能够服务于特定的场景。这里主要演示了使用长 CoT 的推理数据对 doubao-lite-32k 进行监督微调(SFT),以使 doubao-lite 大模型具备类似 DeepSeek-R1 的深度思考和推理能力。
数据准备
火山方舟上模型精调数据集文件需为 jsonl 格式的文件,数据格式示例如下:
{"messages": [{"role": "user", "content": "孤灯照不寐,风雨满西林。下一句是?"}, {"role": "assistant", "content": "多少关心事,书灰到夜深。"}]}
{"messages": [{"role": "system", "content": "请根据古诗内容,仅回复作者的名字。"}, {"role": "user", "content": "孤灯照不寐,风雨满西林。多少关心事,书灰到夜深。"}, {"role": "assistant", "content": "李群玉", "loss_weight": 1.0}]}
因此,需要将数据集处理为上述格式并保存为 jsonl 文件。
这里使用的数据集为开源的医疗推理数据集:FreedomIntelligence/medical-o1-reasoning-SFT,总共 24k+ 中文数据样本,数据处理代码如下:
import json
from datasets import load_dataset
def format_func(examples):
cots = examples["Complex_CoT"]
outputs = examples["Response"]
assistant = []
for cot, output in zip(cots, outputs):
assistant.append(assistant_prompt.format(cot, output))
return {"assistant": assistant}
system_prompt = ("You are a medical expert with advanced knowledge in clinical reasoning, diagnostics, and "
"treatment planning. Please answer the following medical question. Before answering, "
"think carefully about the question and create a step-by-step chain of thoughts to ensure a logical and accurate response.")
assistant_prompt = "<think>\n{}\n</think>\n<answer>\n{}\n</answer>"
dataset = load_dataset(
"FreedomIntelligence/medical-o1-reasoning-SFT",
'zh', split = "train", trust_remote_code=True)
dataset = dataset.map(format_func, batched=True, num_proc=1)
with open("r1_train_data.jsonl", "w") as f:
for item in dataset:
messages = [{"role": "system", "content": system_prompt}, {"role": "user", "content": item["Question"]},
{"role": "assistant", "content": item["assistant"]}]
f.write(json.dumps({"messages": messages}, ensure_ascii=False) + "\n")
开始微调
微调结果
Loss 曲线
模型推理测试
使用精调后的模型创建推理接入点后就可以使用 OpenAI API 进行调用推理。创建后可以在推理接入点的 API 调用界面查看到 API Key、base url 和 推理接入点名称,测试代码如下:
export OPENAI_API_KEY="YOUR_API_KEY"
export OPENAI_API_BASE="YOUR_API_BASE"
import os
from openai import OpenAI
client = OpenAI(
api_key = os.environ.get("OPENAI_API_KEY"),
base_url = os.environ.get("OPENAI_API_BASE"),
)
system_prompt = ("You are a medical expert with advanced knowledge in clinical reasoning, diagnostics, and "
"treatment planning. Please answer the following medical question. Before answering, "
"think carefully about the question and create a step-by-step chain of thoughts to ensure a logical and accurate response.")
question = "有一个病人咳嗽两三个月了,并且流鼻涕,这两天才查出来全鸡蛋过敏,现在应该怎么办" #"一个患有急性阑尾炎的病人已经发病5天,腹痛稍有减轻但仍然发热,在体检时发现右下腹有压痛的包块,此时应如何处理?"
completion = client.chat.completions.create(
model = "ep-xxx", # your model endpoint ID
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": question},
],
)
print(completion.choices[0].message.content)
模型推理结果如下:
<think>
这个病人已经咳嗽和流鼻涕两个月了,这听起来不像是普通的感冒,可能是慢性呼吸道问题。他最近才被查出对鸡蛋过敏,我想这可能和他的症状有关。
全鸡蛋过敏是一种比较常见的食物过敏,有些人对鸡蛋蛋白过敏。这种过敏会导致呼吸道症状,比如咳嗽和流鼻涕。不过,症状也可能是因为其他原因引起的。
让我们来看看他的症状。他咳嗽和流鼻涕已经持续了两个月,这确实很长时间。如果是因为过敏,那可能是鸡蛋引起的慢性过敏反应。
在这种情况下,首先要做的是确认他的过敏是由鸡蛋引起的。这可以通过皮肤点刺试验或血液检测来确认。
如果确认了是鸡蛋过敏,那么接下来要考虑的是如何控制症状。一般来说,避免食用鸡蛋是最基本的措施。但是,对于已经出现症状的人来说,这可能不够。
既然他已经有慢性症状,可能需要药物来控制。像抗组胺药可以缓解流鼻涕,而支气管扩张剂可以帮助缓解咳嗽。
同时,他还需要知道如何识别和避免潜在的过敏原,包括其他可能含有鸡蛋成分的食物或产品。
总的来说,他需要尽快进行过敏原测试,确认过敏原因,并根据结果采取相应的治疗措施。这样可以帮助他缓解症状,避免进一步的过敏反应。
</think>
<answer>
对于这位咳嗽和流鼻涕已经持续了两个月的病人,首先需要确认他的症状是否确实是由鸡蛋过敏引起的。这可以通过皮肤点刺试验或血液检测来进行。如果确认是鸡蛋过敏,那么首要的措施是避免食用鸡蛋。此外,对于已经出现症状的患者,可能需要使用药物来控制症状,例如抗组胺药来缓解流鼻涕,支气管扩张剂来缓解咳嗽。
同时,病人需要了解如何识别和避免潜在的过敏原,包括其他可能含有鸡蛋成分的食物或产品。这可以通过仔细阅读食品标签来实现。如果可能,也可以咨询过敏专科医生,以获取更详细的治疗建议和管理方案。
总之,对于慢性过敏反应,及时进行过敏原测试和采取相应的治疗措施是非常重要的,以帮助缓解症状并避免进一步的过敏反应。
</answer>
火山引擎优惠活动
还没有用过火山引擎大模型平台的小伙伴赶紧去注册体验吧,现在注册还可以领取大模型权益,获得 1 张 15 元代金券,约可抵扣 375 万 DeepSeek-R1 模型 tokens,畅享 DeepSeek R1 和 V3,支持 3 万 RPM和 500 万 TPM不限速,可以点击下方链接或扫描下方图片二维码注册领取:
火山方舟大模型体验中心-火山引擎
更多推荐
所有评论(0)