wsl环境ollama运行ai
初见

流程
打开wsl
1
wsl
启动ollama
1 | ollama serve |
- 进入model文件夹下
1 | cd /root/model |
- 下载模型并复制到model文件夹下 hf-mirror.com
- 创建modelfile
示例:
1 | FROM ./unsloth.Q4_K_M.gguf |
- 创建模型
1 | ollama create lumi -f lumi-modelfile |
lumi 为模型名 lumi-modelfile 为modelfile名
- 运行
1 | ollama run lumi |
训练ai
cot以及Few-shot提升模型的理解力和生成能力
这段内容主要在讨论 Prompt 优化 的两个主要阶段(训练阶段和预测阶段),以及如何通过 Few-shot 和 Chain of Thought(COT)提升模型的理解力和生成能力。以下是分步骤的通俗解释和理解:
1. Prompt 优化的训练阶段
目的:
训练阶段的 Prompt 优化主要是为了增强模型对指令的理解和执行能力。通过在训练数据中加入多样化的指令,可以让模型学会更好地理解不同表达方式的任务需求。方法:
- 构建多种形式的指令。比如:
- 单句指令:“请总结以下内容。”
- 问句指令:“这篇文章的主要内容是什么?”
- 复杂指令:“请从以下段落中提取关键信息并生成摘要。”
- 让模型学会在不同上下文和表达形式下完成任务。
- 构建多种形式的指令。比如:
效果:
在训练时加入多样化的 Prompt,可以使模型在面对未见过的指令时,依然能够很好地理解和执行任务。
通俗理解:
如果把训练阶段比作给模型上课,Prompt 优化就是给模型布置多样化的作业,让它练习解决同一问题的多种方式。这样,即使考试题目(预测阶段的指令)和作业不完全一样,它也能举一反三。
2. Prompt 优化的预测阶段
目的:
在模型无法重新训练(如 ChatGPT 或百度文心一言这种闭源服务)时,通过优化输入的 Prompt,提升模型的输出质量。方法:
- 明确指令: 使用清晰、具体的语言描述任务,避免歧义。例如:
- 模糊指令:“总结一下。”(可能得到不相关的结果)
- 明确指令:“请总结以下段落的主要观点,并限制在 50 字内。”
- 多轮交互: 在多轮对话中逐步优化指令,减少误解。
- 明确指令: 使用清晰、具体的语言描述任务,避免歧义。例如:
与训练阶段保持一致:
如果模型在训练阶段使用了一种特定风格或结构的 Prompt,预测时尽量保持一致,这样可以最大化模型的任务匹配度。
通俗理解:
预测阶段的 Prompt 优化就像是与一个不熟悉的助理沟通。你需要尽量用清楚的语言告诉它你的要求,避免模棱两可的表达。而如果你知道这个助理之前接受过某种训练,你应该按照它熟悉的方式去沟通,效果会更好。
3. Few-shot 和 Chain of Thought(COT)的作用
这两种方法是训练阶段和预测阶段都可以用来提升模型性能的技巧。
Few-shot Learning
- 定义: 在 Prompt 中加入几个已经完成的任务示例,帮助模型更好地理解任务需求。
- 作用: 给模型提供“样板答案”,让它学会模仿类似的逻辑和输出格式。
- 示例:
1
2
3
4
5
6
7
8
9示例 1:
输入:文章 A
输出:文章 A 的摘要
示例 2:
输入:文章 B
输出:文章 B 的摘要
任务:输入文章 C,生成它的摘要。
Chain of Thought (COT)
- 定义: 在 Prompt 中展示解题的思考过程,而不是直接给出答案。
- 作用: 帮助模型分步骤推理,提高复杂任务的准确性。
- 示例:
1
2
3
4
5
6问题:123 + 456 等于多少?
COT 提示:
1. 首先计算个位数:3 + 6 = 9;
2. 然后计算十位数:2 + 5 = 7;
3. 最后计算百位数:1 + 4 = 5;
答案是:579。
效果:
- Few-shot 提供了任务的模板,适合用于任务上下文明确的场景。
- COT 则增强了推理和复杂任务的理解能力,特别是在数学、逻辑等需要多步推导的任务中效果显著。
整体总结
训练阶段的 Prompt 优化:
多样化的指令设计让模型“见多识广”,可以更好地泛化到未知任务。预测阶段的 Prompt 优化:
针对无法训练的模型,通过调整指令的表达方式和结构,提高输出质量。Few-shot 和 COT 的结合:
- Few-shot 提供任务模板,让模型理解任务上下文。
- COT 强化推理能力,帮助模型逐步完成复杂任务。
通过这些方法,Prompt 优化能够显著提升模型的理解和生成能力,适应不同场景的需求。
Epoch
什么是 Epoch?
Epoch 是深度学习模型训练中的一个重要超参数,表示完成一次完整的数据集训练的过程。
- 如果你有一个包含 10,000 个样本的数据集,当模型完成对这 10,000 个样本的正向和反向传播(即训练)时,就完成了一个 epoch。
- 通俗理解:每一个 epoch 就像模型“读完一遍”训练材料。训练次数越多,模型对数据的记忆可能越深,但过多的 epoch 可能导致模型过拟合。
Epoch 的作用和调整
Epoch 决定了模型在训练时使用数据的次数,以及对数据模式的学习深度。
- 少量数据:需要多次重复训练(更多的 epoch)来充分挖掘数据的信息。
- 比如,只有 100 条数据时,可能需要 15 个 epoch。
- 大量数据:通常少量 epoch 就可以取得较好的效果,因为模型已经有足够的数据进行学习。
- 比如,有 10,000 条数据时,2-3 个 epoch 往往足够。
为什么调整 Epoch?
- 防止过拟合:
如果训练 epoch 太多,模型可能会对训练数据记忆过于深刻,导致在测试集上的表现变差。 - 节省时间和资源:
过多的 epoch 不仅浪费计算资源,还可能延长训练时间,尤其是在大数据集的情况下。
如何判断 Epoch 使用是否合适?
监控验证集性能:
在每个 epoch 结束时,评估模型在验证集上的表现(如 loss、准确率)。- 如果验证集的性能不再提升,说明可以停止训练。
- 如果验证集性能开始下降,可能已经发生过拟合,应停止训练。
观察 loss 曲线:
- 训练 loss: 应该随着 epoch 增加不断下降。
- 验证 loss: 应该在训练初期下降,但到某个 epoch 后趋于平稳,甚至上升。
- 如果验证 loss 开始增加,说明模型可能已经过拟合。
动态调整:
- 小数据集:更多 epoch 有助于充分训练模型。
- 大数据集:通常 2-5 个 epoch 已经足够。
具体的经验规则
以下是一些经验性的调整方法:
根据数据量调整 Epoch
- 少量数据(100-1000 条):
- 使用更多 epoch,比如 10-15。
- 中等数据量(5,000-10,000 条):
- 适用 4-5 个 epoch。
- 大量数据(50,000+ 条):
- 2-3 个 epoch 通常足够。
- 少量数据(100-1000 条):
小数据集训练:
- 数据量少时,每个样本被模型学习的次数较少,因此需要增加 epoch 来弥补数据不足。
领域增强数据:
- 如果是特定领域的数据(如专业领域总结),数据量可以少,但质量要高。数百条高质量数据即可,训练时适当增加 epoch(例如 10-15),让模型更充分地学习领域特性。
与其他超参数的关系
Epoch 与其他超参数的调整密切相关:
学习率(Learning Rate, LR):
- 如果 epoch 数较多,可以适当降低学习率,避免模型在后期学习过快导致不稳定。
- 如果使用 LoRA 微调,可以适当增大学习率(如 5e-4)。
批大小(Batch Size, BS):
- 如果 batch_size 较大,单个 epoch 的训练时间会缩短,但可能需要更多的 epoch 来达到收敛效果。
- 对于小显存设备,可以通过增加梯度累积步数(accumulate steps)间接增大批大小。
早停机制(Early Stopping):
- 可以设置一个耐心参数(如 3-5),如果验证集性能连续几次 epoch 无提升,就提前停止训练。
通俗比喻
Epoch 就像是在学校学习的次数:
- 训练模型就像复习考试,每复习一遍教材相当于一个 epoch。
- 如果教材太厚(数据多),复习一两遍就差不多了。
- 如果教材内容少(数据少),需要多复习几遍,才能熟记知识点。
Early Stopping 是“老师检查你的成绩”:
- 如果发现复习 3-5 次后,成绩再也没有进步,老师就会建议你停止复习。
总结
- Epoch 决定了模型使用数据的次数,是训练中的核心超参数之一。
- 小数据集需要更多 epoch,大数据集通常少量 epoch 就够了。
- 配合验证集性能、学习率和批大小动态调整,可以找到最优的训练方案。
- 合理调整 Epoch 能平衡训练效率和模型性能,避免过拟合和资源浪费。
Unsloth参数
数据集放入
处于unsloth colab的data Prep位置,放入数据集:
注意参数匹配:

1 | alpaca_prompt = """Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request. |
再次训练
如下图:

想要再次训练,下载gguf文件,改model_name的名字即可再次训练。