发布时间:2025-05-15 11:34:59编辑:123阅读(141)
基于Qwen3-8B微调小说模型
数据准备(参考https://py3study.com/Article/details/id/20105.html,爬取小说作为数据集)
升级ollama版本(下载最新的千问3模型需要最新的ollama版本)
curl -fsSL https://ollama.com/install.sh | sh
下载模型
ollama run qwen3:8b
python调用ollama库
pip install ollama -i https://mirrors.aliyun.com/pypi/simple
处理流程
1 搜索小说数据,构建Json文件{书名:"xxx",书存放路径:"xxx",章节名称:"xxx",章节文本:'xxx',章节文本分割:'xxx' }。
2 调用API接口将小说每一章节进行总结。( 如果有字数要求的话,将数据切片,以每句话切分数据, 例800字的文章,
将切分的句子拼接成一个一个由句子组曾的800字文章段落,在调用API总结)。
3 构建数据,将模型总结的数据,和最开始输入的原始Json数据一起构建成,模型需要的指令微调数据。
4 最后会将构建好的数据保存为JSON文件
小说数据集制作
需要将小说数据制作成以下格式进行微调
{
"instruction":"回答以下用户问题,仅输出答案。",
"input":"1+1等于几?",
"output":"2"
}
instruction:可以设置为:你是一个熟读各类小说的专家,请你根据要求写一段1000字左右的小说
input:通过大模型对output的内容进行小说情节的总结
output:即为小说段落文本
代码如下:
import json import ollama import os # 小说总结提示词 mess = [ {"role": "system", "content": """# Role: 总结者 ## Profile - language: 中文 - description: 总结user提交的内容。用一句不超过50字的话总结这段小说的情节,仅回答总结,不需要添加其他内容。 ## Skills 1. 高效提取和浓缩关键信息。 2. 提供简洁且相关的总结。 3. 理解叙事结构和主题。 ## Rules 1. 仅输出总结,不添加其他内容。 2. 确保总结不超过50字。 3. 保持总结的清晰性和相关性。 ## Workflows 1. 分析用户输入,识别主要情节。 2. 将识别出的情节浓缩成一个句子。 3. 检查句子是否不超过50字。 4. 向用户提供总结。""" }, {'role': 'user','content': ''} ] def build_dataset(name, org_txt, summarize): lora_path = os.path.join(os.getcwd(), f'{name}.json') instruction_prompt = "你是一个熟读各类小说的专家,请你根据要求写一段800字左右的小说。" dataset = [] dataset.append({ # prompt提示词 "instruction": instruction_prompt, # 大模型对小说章节总结的内容,作为输入 "input": summarize, # 小说章节原始文本 "output": org_txt }) print(dataset) with open(lora_path, "w", encoding='utf-8') as f: f.write(json.dumps(dataset, ensure_ascii=False, indent=4)) return dataset book_list = ['一花一酒一仙人,亦眠亦醉亦长生.jsonl','万剑天尊.jsonl', '不懂别乱说,我这不是杂灵根.jsonl', '丹道第一圣.jsonl','人在修仙世界,和谁都能五五开.jsonl', '充钱就变强,我的修为无敌了.jsonl', '反派:气运之子太多,我摆烂了.jsonl','反派:禁忌女帝师尊,我无敌了!.jsonl', '女帝逼走我后,才发现我无敌天下.jsonl', '师弟们都是大佬,那我只能开挂了.jsonl', '我,稳健金乌,只想娶妻过日子!.jsonl','玄幻:开局瞎子,从拉二胡开始.jsonl', '苟在修仙界勤能补拙.jsonl', '谁让他当鬼差的?.jsonl', '谁让你真修仙的?.jsonl', '转生神树,我打造阴兵家族.jsonl', '逆天狂徒之超级软饭王.jsonl','长生:我在掖幽庭风华日月.jsonl'] dataset = [] for book in book_list: book_path = os.path.join(os.getcwd(), book) with open(book_path, mode='r', encoding='utf-8') as f: for i in f.readlines(): # 小说章节原文 org_txt = json.loads(i).get('txt') mess[1]['content'] = org_txt response = ollama.chat(model="qwen3:8b", messages=mess) # qwen3:8b 对小说章节原文的总结 ret_split = response['message']['content'].split('。') # 去除列表中为空的内容 new_lst = list(filter(lambda x: x is not None and x != "" , ret_split)) summarize = new_lst[-1].replace('\n</think>\n\n', '') # 构建模型需要的指令微调数据集 lora_path = os.path.join(os.getcwd(), 'lora.json') instruction_prompt="你是一个熟读各类小说的专家,请你根据要求写一段800字左右的小说。" dataset.append({ # prompt提示词 "instruction": instruction_prompt, # 大模型对小说章节总结的内容,作为输入 "input": summarize, # 小说章节原始文本 "output": org_txt }) print({ # prompt提示词 "instruction": instruction_prompt, # 大模型对小说章节总结的内容,作为输入 "input": summarize, # 小说章节原始文本 "output": org_txt }) with open(lora_path, "w", encoding='utf-8') as f: f.write(json.dumps(dataset, ensure_ascii=False, indent=4))
生成的数据集
安装虚拟环境
建议新建一个虚拟环境,大模型的搭建有的比较复杂,容易引起环境问题,导致现有的环境不能用,新建是最明智的选择,
新建虚拟环境: 执行命令:
conda create --name novel python=3.9
安装完成后,激活虚拟环境,执行命令:
conda activate novel
查看CUDA版本,执行命令:
nvcc -V
ms-swift环境安装
安装swift框架
从源代码安装:如果需要使用最新的开发版本,或者计划对框架进行自定义修改,以满足特定的开发需求,那么从源代码安装是一个不错的选择。首先,确保已安装Git工具,它是进行代码版本管理和获取源代码的重要工具。然后执行以下命令:
git clone https://github.com/modelscope/ms-swift.git
cd ms-swift
pip install -e . -i https://mirrors.aliyun.com/pypi/simple
安装vllm工具
vllm是一个高性能的大语言模型推理和服务库,基于Python和CUDA开发。它专为提升大语言模型推理速度而设计,能够充分利用现代GPU的并行计算能力,大幅减少推理时间。
vllm具有诸多优势特点,使其在大语言模型推理领域备受青睐。首先,vllm采用了PagedAttention算法,这种算法有效解决了传统注意力机制中的内存碎片化问题,使得内存使用更加高效。在处理长文本序列时,能够显著减少内存占用,同时提升计算速度。其次,vllm支持流式输出,在推理过程中,它可以逐词生成结果并实时返回给用户,而无需等待整个文本生成完成,这对于实时交互场景,如聊天机器人、实时翻译等,极大地提升了用户体验。此外,vllm对多种主流大语言模型具有良好的兼容性,如GPT - NeoX、LLaMA等,开发者可以方便地将其集成到自己的项目中,快速搭建高效的推理服务。
要安装vllm,在bash环境下执行以下命令即可:
pip install vllm -i https://mirrors.aliyun.com/pypi/simple
模型准备
模型下载在下载模型之前,确保已经安装了 git-lfs。git-lfs(Git Large File Storage)是一个用于管理大型文件的扩展,在下载包含大文
件的模型时非常必要。如果尚未安装,可以通过以下命令进行安装:
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
sudo apt-get install git-lfs
接下来,从 modelscope 的模型库中下载模型权重文件。这里选择下载 Qwen3-8B模型:
git clone https://www.modelscope.cn/Qwen/Qwen3-8B
此命令会将 Qwen3-8B 模型的所有文件克隆到当前目录下。在下载过程中,由于模型文件可能较大,需要确保网络稳定,并且磁盘空间足够。如果下载过程中出现中断,可以使用 git lfs pull 命令继续下载未完成的文件。
模型微调
选择模型和数据集:要对Qwen3 - 8B 模型进行微调,使其能够更好地服务于特定领域的问答任务。可以从魔搭社区获取相关的领域数据集,魔搭社区拥有丰富的数据资源,涵盖了多个领域,能够为模型训练提供有力支持。当然,如果项目有特殊需求,也可以根据实际情况自定义数据集,以确保模型能够准确地学习到特定领域的知识和语言模式。
准备训练环境:在开始训练之前,要确保已成功安装swift框架,并根据模型和数据集的需求,合理配置硬件资源,如准备好GPU以加速训练过程。同时,检查并安装好所需的Python依赖库,确保整个训练环境的完整性和稳定性。
编写训练命令:在命令行中执行以下类似命令(根据实际情况调整参数):
CUDA_VISIBLE_DEVICES = 0 \ swift sft \ # --model指定了要微调的模型。 --model /home/sam_admin/novel_text/Qwen3-8B \ # --train_type设置为lora,表示采用LoRA微调方式,这种方式能够在不改变模型整体架构的前提下,高效地对模型进行 优化。 --train_type lora \ # --dataset指定了数据集的路径和采样数量。 --dataset /home/sam_admin/novel_text/lora.json \ # --torch_dtype设置为bfloat16,指定了模型训练的数据类型,能够在保证一定精度的同时,提升计算效率。 --torch_dtype bfloat16 \ # --num_train_epochs设置了训练轮数为2。 --num_train_epochs 2 \ # --per_device_train_batch_size和--per_device_eval_batch_size分别设置了训练和评估时的批量大小。 --per_device_train_batch_size 2 \ --per_device_eval_batch_size 2 \ # --learning_rate设置了学习率为5e - 5,它控制着模型参数更新的步长。 --learning_rate 5e - 5 \ # --lora_rank和--lora_alpha是LoRA相关的参数,分别设置为8和32,影响着LoRA微调的效果。 --lora_rank 8 \ --lora_alpha 32 \ # --target_modules指定了要应用LoRA的模块。 --target_modules all - linear \ # --gradient_accumulation_steps设置为2,表示梯度累积的步数,能够在有限的硬件资源下,模拟更大的批量训练。 --gradient_accumulation_steps 2 \ # --eval_steps和--save_steps分别设置了评估和保存模型的步数。 --eval_steps 100 \ --save_steps 100 \ # --save_total_limit设置了最多保存的模型数量。 --save_total_limit 2 \ # --logging_steps设置了日志记录的步数。 --logging_steps 10 \ # --max_length设置了输入序列的最大长度。 --max_length 8192 \ # --output_dir指定了输出目录。 --output_dir /home/sam_admin/novel_text/novel_fine_tuned_model \ # --system设置了系统提示信息,帮助模型更好地理解任务。 --system '你是一个熟读各类小说的专家' \ # --warmup_ratio设置了学习率预热比例。 --warmup_ratio 0.1 \ # --dataloader_num_workers设置了数据加载器的工作线程数。 --dataloader_num_workers 4 \ # --model_author和--model_name分别设置了模型的作者和名称,方便管理和识别模型。 --model_author ST \ --model_name novel_model
执行训练
swift sft \
--model /home/sam_admin/novel_text/Qwen3-8B \
--train_type lora \
--dataset /home/sam_admin/novel_text/lora.json \
--torch_dtype bfloat16 \
--num_train_epochs 2 \
--per_device_train_batch_size 2 \
--per_device_eval_batch_size 2 \
--learning_rate 5e-5 \
--lora_rank 8 \
--lora_alpha 32 \
--target_modules all-linear \
--gradient_accumulation_steps 2 \
--eval_steps 100 \
--save_steps 100 \
--save_total_limit 2 \
--logging_steps 10 \
--max_length 8192 \
--output_dir /home/sam_admin/novel_text/novel_fine_tuned_model \
--system '你是一个熟读各类小说的专家' \
--warmup_ratio 0.1 \
--dataloader_num_workers 4 \
--model_author ST \
--model_name novel_model
执行训练:运行上述命令后,swift将按照设置的参数开始模型微调过程。在训练过程中,可以在终端中实时查看训练进度、损失值等信息,通过这些信息,可以监控训练过程,判断模型是否正常收敛,是否需要调整参数。
1111
上一篇: 大模型基础架构
下一篇: 没有了
48632
47629
38421
35639
30088
26812
25821
20695
20444
18843
141°
220°
264°
273°
273°
272°
317°
369°
502°
491°