LLaMA Factory微调全攻略(四):从LOSS曲线观测到模型部署的完整指南

LLaMA Factory微调全攻略(四):从LOSS曲线观测到模型部署的完整指南

本文详解大模型微调过程中LOSS曲线的观测方法,介绍微调后模型的合并、导出与部署流程。通过SwanLab监控训练过程,并使用Ollama和VLLM两种方式实现本地部署,最后对比模型微调前后的效果,验证微调成效。从训练监控到模型部署,为大模型应用提供完整解决方案。

前排提示,文末有大模型AGI-ZEEKLOG独家资料包哦!

微调过程观察

微调过程中,我们可以通过右下角的 LOSS 曲线来简单观测整个微调过程。

LOSS(损失值)

在模型微调中,LOSS(损失函数)是一个可微的数学函数,它量化了模型预测结果与真实目标值之间的误差(输出为一个标量数值)。微调的核心目标就是通过优化算法(如梯度下降)持续最小化这个 LOSS 值:计算 LOSS 对模型参数的梯度,并据此调整参数,使预测误差不断减小。LOSS 值的高低直接反映了模型预测的准确性,其持续下降是学习过程有效的关键指标。

  • LOSS 是什么?
  • 简单说,LOSS 就是模型在微调过程中犯错误的“程度”的评分,它是一个数字。
  • 怎么算出来的?
  • 模型对一条数据做预测(比如判断图片是猫还是狗)。然后,我们把模型的预测结果和这条数据的正确答案拿出来对比。
  • 对比什么?
  • 对比模型“猜”得有多不准。猜得越离谱,这个错误评分(LOSS)就越大;猜得越接近正确答案,这个错误评分(LOSS)就越小。
  • 微调时用它干什么?
  • 微调的核心目标就是让模型少犯错。所以,微调过程就是想尽办法让这个 LOSS(错误评分)变得越来越小。
  • 怎么变小?
  • 模型内部有很多可以调整的小旋钮(参数)。微调算法会根据当前这个 LOSS 值,自动计算出应该拧哪些旋钮、往哪个方向拧(增大一点还是减小一点),才能让下次遇到类似数据时,错误评分(LOSS)降低一些。
  • 为什么关心它?
  • 在微调过程中,我们主要盯着 LOSS 的变化趋势。如果 LOSS 稳定地下降,说明模型的调整是有效的,它在学习,错误在减少。如果 LOSS 不降反升或者剧烈波动,就说明学习过程可能出了问题。
  • 常见误区
  • LOSS 曲线很好看(逐步下降趋于平缓),不代表模型最终的训练效果一定会好,它只能表示整个训练过程是没问题的。

SwanLab

在 LLaMA Board 中,我们只能看到简单的 LOSS ,如果想看到更多维度的指标,可以通过 SwanLab、TensorBoard、Wandb 等可视化工具,这里我是用的是 SwanLab。

SwanLab 是一个开源的训练跟踪与可视化工具,云端和离线均可使用,支持超参数记录、指标记录、多实验对比、硬件监控、实验环境记录等功能,可以有效地帮助开发者管理实验。

在 LLaMA Facroty 中国为 SwanLab 单独开了一个 Tab,可以选择启用,并填写一个项目名称:

注意使用前,我们先要在 https://swanlab.cn/ 注册好账号,然后在本地环境完成初始化动作:

swanlab login 

当你看到如下提示时:

swanlab: Logging into swanlab cloud. swanlab: You can find your API key at: https://swanlab.cn/settings swanlab: Paste an API key from your profile and hit enter, or press 'CTRL-C' to quit: 

在用户设置页面复制你的 API Key,粘贴后按下回车即可完成登录,之后无需再次登录。 如果配置成功,在启动微调任务后可以看到 SwanLab 的监控地址:

进入后,我们可以看到微调过程中的详细日志:

以及当前系统环境的硬件消耗情况:

几种常见的 LOSS 曲线

Train LOSS 与 Eval LOSS

当我们在微调参数中设定了一定的验证集比例,将会多生成一条 Eval LOSS 曲线,体现模型在验证集上的表现。

微调后模型使用及效果验证

加载模型(通过 Lora 适配器)

微调任务完成后,我们进入在启动微调时,设定的输出目录:

cd /root/autodl-tmp/models/security007 

可以看到输出的所有文件:

包括这几类:

  1. 模型权重文件
  • adapter_model.safetensors:LoRA 适配器的权重文件(核心增量参数)
  • checkpoint-100/200/…:不同步数的训练检查点(含模型参数,用于恢复训练)
  1. 配置文件
  • adapter_config.json:LoRA 训练配置(如秩、目标层等)
  • tokenizer_config.json / special_tokens_map.json:分词器配置
  • training_args.yaml / training_args.bin:训练超参数(学习率、批次等)
  1. 日志与结果
  • trainer_log.jsonl / running_log.txt:训练过程日志
  • all_results.json / train_results.json:训练指标(损失、精度等)
  • training_loss.png:损失曲线可视化图
  1. 分词器数据
  • merges.txt:BPE 分词合并规则
  • tokenizer.json / vocab.json:分词器词表与编码规则
  • added_tokens.json:训练中新增的自定义 Token
在 LoRA 微调中,只会训练插入的低秩矩阵(适配器),原模型参数被冻结不变,因此输出目录中仅包含 Lora 适配器,不包含模型原始权重。如果要得到微调后的完整模型,需后续手动合并适配器与原模型。

下面,我们可能想快速对微调后的模型效果进行简单的验证,可以在 Webui 中通过检查点路径,加载这个适配器,并且重新加载模型,注意检查点路径填写微调后的输出目录,模型路径还填写微调前基础模型的路径:

效果验证(注意调一下最大生成长度,默认的 1024 比较小,非常容易截断):

作为对比,可以直接去掉上面的检查点路径,重新加载(先卸载)模型,就可以得到原始模型的回答结果:

模型合并和导出

以上的使用方式只适用于临时测试,后续使用微调后的模型我们不可能每次都同时加载一个适配器和模型,所以为了后续方便使用,我们需要将原始模型和 Lora 适配器进行合并,然后导出。

我们重新把微调输出目录填入检查点路径,然后重新加载模型,并设定一个导出目录(这里可以设定模型输出后的量化等级、以及一键上传 Hugging Face 等等,大家可以选择设置):

导出成功后,我们进入导出目录,可以看到合并后的模型文件:

cd /root/autodl-tmp/save/Qwen2.5-7B-Instruct-Security 

然后我们清空检查点路径,将合并后的模型目录填入模型路径,重新加载模型:

重新测试,可以得到和之前一样的效果:

本地调用微调后的模型

下面我们要考虑在本地部署并通过 API 的方式调用微调后的模型,目前两个主流的本地部署模型的方案分别是 Ollama 和 VLLM:

Ollama 是一款专注于本地部署的轻量级大模型工具,以 “开箱即用” 为核心理念,支持全平台,一键安装后即可通过命令行快速启动模型。它内置 1700 + 主流模型库(如 Llama、Qwen、Mistral),自动下载优化后的量化版本(如 int4 量化),显存占用降低 50%,14B 模型仅需 11GB 显存即可运行。Ollama 提供类 ChatGPT 的交互界面,支持流式输出和 JSON 响应,适合个人开发者快速验证模型能力、本地测试或对隐私敏感的场景(如医疗数据处理),且兼容 CPU 推理(需 16GB + 内存)和 GPU 加速,硬件门槛极低。最新版本已支持视觉模型,可处理多模态任务。
VLLM 是专为高性能推理设计的企业级框架,基于PyTorch构建,创新性引入 PagedAttention 技术,将KV Cache分块存储,显存利用率提升30%,支持4K以上长文本推理。其动态批处理技术实现高吞吐量(如Llama-8B在H100上可达5000+ tokens/s),是 Ollama 的5倍,并原生支持多 GPU 张量并行,可在 8 台H100 服务器上部署 70B 模型,支撑日均1亿次请求,响应延迟<500ms。VLLM 兼容 HuggingFace 模型,提供 Prometheus 监控和自动故障恢复机制,适合电商搜索、智能客服等高并发场景,以及多模态任务。
  • 选 Ollama:需求为快速部署、低硬件门槛、交互式对话,例如个人开发者测试模型、小型团队搭建内部工具。
  • 选 VLLM:需求为高性能推理、高并发处理、多GPU扩展,例如电商平台支撑亿级请求、科研机构处理大规模数据,或需定制化模型参数的场景。

通过 vLLM调用

在 LLaMA Factory 中,提供了 llamafactory-cli api 命令来帮助我们快速将模型部署为 API 调用,通过指定 --infer_backend vllm 参数可以启用 VLLM 推理(如果不指定,默认使用的是 Huggingface 推理引擎):

API_PORT=6006 API_MODEL_NAME=security llamafactory-cli api \ --model_name_or_path /root/autodl-tmp/models/security1011 --template qwen \ --infer_backend vllm \ --vllm_enforce_eager 

环境变量:

  • API_PORT=6006:设定 API 服务要监听的端口号为6006。
  • API_MODEL_NAME=security:给 API 服务所使用的模型设定一个自定义名称,如果不指定默认会使用 gpt-3.5-turbo。

命令行参数

  • –model_name_or_path /root/autodl-tmp/save/Qwen2.5-7B-Instruct-Security:指定模型的路径。
  • –template qwen:指定对话模板为 Qwen 这样能确保输入输出的格式和 Qwen 模型相适配。
  • –infer_backend vllm:把推理后端设置为 vLLM。
  • –vllm_enforce_eager:强制 vLLM 用动态图模式,这种模式在调试或者需要确定性执行顺序时非常有用。

当服务输出以下内容时表示成功启动:

我们通过 http://localhost:6006/docs 可以访问部署后的 API 接口文档(可以看到是符合 OPEN AI 格式的):

我们尝试获取模型列表,可以看到返回了我们指定好的 security 模型:

我们可以尝试在一些聊天客户端添加自定义提供商:

测试调用:

通过 Ollama 调用

Ollama 是建立在 llama.cpp 开源推理引擎基础上的大模型推理工具框架,其主要支持运行 GGUF 格式的模型。

GGUF(GGML Universal File)是专为大型语言模型(LLM)设计的文件格式,其优化了数据的存储方式,减少了存储空间的占用,这对于包含大量参数的大型模型尤为重要。

相比于默认的 BF16 精度(每个参数占用 16 位(2 字节)),4BIT 量化(每个参数仅占用 4 位(0.5 字节))可以将模型推理的显存占用降低 75%。所以使用 Ollama 运行 7B 的模型大概仅需要 4G 显存(考虑到其他开销实际可能更大一点)。但是量化后的模型也就意味着会损失一定精度,这也是为什么大家在使用 Ollama 运行模型总觉得会比和其他方式运行模型变得 “更傻” 的原因。

LLaMA Factory 默认并没有将模型转换为 GGUF 的方法,我们需要自己 llama.cpp 的仓库,使用其中的转换脚本:

git clone https://github.com/ggerganov/llama.cpp.git cd llama.cpp/gguf-py pip install --editable . 

下载并安装好依赖后,我们执行其中的脚本,将模型目录指定为我们刚刚导出的合并好的目录:

python convert_hf_to_gguf.py /root/autodl-tmp/save/Qwen2.5-7B-Instruct-Security --outtype q8_0 

开始转换:

转换成功后,将在微调后合并的模型目录下生产一个 GGUF 文件(/root/autodl-tmp/save/Qwen2.5-7B-Instruct-Security/Qwen2.5-7B-Instruct-Security-F16.gguf):

然后我们在本地安装 Ollama:

curl -fsSL https://ollama.com/install.sh | sh 

安装完成后,启动 Ollama:

OLLAMA_MODELS=/root/autodl-tmp/ollama ollama serve 

然后我们将刚刚导出好的 GGUF 文件给定Ollama进行注册(注意这里指定的是Modelfile文件,而不是GGUF文件):

OLLAMA_MODELS=/root/autodl-tmp/ollama ollama create security -f /root/autodl-tmp/save/Qwen2.5-7B-Instruct-Security/Modelfile 

然后我们就可以使用 Ollama 运行模型了:

ollama run security 

对比模型微调的效果

为了方便验证和对比模型微调后的效果,我们在 Easy Dataset 提供的 Playground 进行测试,这里我们使用 VLLM 部署的服务(不损失精度、推理速度更快),我们在模型配置中添加这个模型。这里只有接口地址、模型名称是要准确填写的,提供商、API 密钥可以随意填写:

然后这里我们使用硅基流动提供的 Qwn2.5-7B-Instruct 作为基础模型,和微调后的模型(Security)进行对比:

以下是从多个角度的详细对比:

从对比可以得出结论,相比微调前的基础模型(Qwen2.5-7B-Instruct),模型微调后:

  • 在数据集内部的特定问题上,具备推理能力,并且回答结果更丰富,说明学习到了数据集内部的知识;
  • 在 Web 安全领域的特定问题上(不在数据集内),具备推理能力,并且回答结果更丰富,说明模型的泛化能力较好,没有过拟合;
  • 在 Web 安全整体的知识体系上,具备推理能力,并且回答结果更丰富,说明模型能够系统性整合 Web 安全领域的知识框架,形成结构化的知识输出体系,同时具备跨知识点的关联推理能力,可基于底层逻辑对复杂知识体系进行演绎构建;
  • 在非 Web 安全的某些其他领域上,具备推理能力,说明模型在聚焦 Web 安全领域专业能力强化的同时,未丧失基础模型的跨领域知识迁移能力,能够基于微调形成的推理框架对非专业领域问题进行逻辑拆解,保持了基础模型的知识泛化性与多领域适应性。

今天这一期,我们就讲到这里,下一期,我会带大家一起学习如何有效评估微调后的模型的效果。
读者福利:倘若大家对大模型感兴趣,那么这套大模型学习资料一定对你有用。

针对0基础小白:

如果你是零基础小白,快速入门大模型是可行的。
大模型学习流程较短,学习内容全面,需要理论与实践结合
学习计划和方向能根据资料进行归纳总结

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

请添加图片描述

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)


第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述
👉大模型视频和PDF合集👈

这里我们能提供零基础学习书籍和视频。作为最快捷也是最有效的方式之一,跟着老师的思路,由浅入深,从理论到实操,其实大模型并不难

在这里插入图片描述
👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

Read more

GLM-4.6V-Flash-WEB Web界面使用指南,拖图就出结果

GLM-4.6V-Flash-WEB Web界面使用指南,拖图就出结果 你不需要配置环境、不用写一行推理代码、甚至不用打开终端——只要把一张截图拖进浏览器窗口,几秒钟后,它就能告诉你图里写了什么、画了什么、哪里有问题。这不是未来预告,而是你现在就能在本地跑起来的真实体验。 GLM-4.6V-Flash-WEB 是智谱AI最新开源的轻量级视觉语言模型,专为Web端实时交互而生。它不像某些“实验室模型”那样只存在于论文和Benchmark表格里,而是真正做到了:部署快、启动快、响应快、上手更快。一块RTX 3090,一个浏览器,一次拖拽,结果即刻呈现。 本文不讲训练原理,不列参数表格,不堆技术术语。我们只聚焦一件事:怎么用好它的Web界面?从零开始,到稳定产出,每一步都清晰可操作。 1. 为什么说“拖图就出结果”不是宣传话术? 很多多模态模型标榜“支持图文理解”,但实际用起来才发现:要装依赖、改路径、调精度、修CUDA版本、

前端防范 XSS(跨站脚本攻击)

目录 一、防范措施 1.layui util  核心转义的特殊字符 示例 2.js-xss.js库 安装 1. Node.js 环境(npm/yarn) 2. 浏览器环境 核心 API 基础使用 1. 基础过滤(默认规则) 2. 自定义过滤规则 (1)允许特定标签 (2)允许特定属性 (3)自定义标签处理 (4)自定义属性处理 (5)转义特定字符 常见场景示例 1. 过滤用户输入的评论内容 2. 允许特定富文本标签(如富文本编辑器内容) 注意事项 更多配置 XSS(跨站脚本攻击)是一种常见的网络攻击手段,它允许攻击者将恶意脚本注入到其他用户的浏览器中。

详细教程:如何从前端查看调用接口、传参及返回结果(附带图片案例)

详细教程:如何从前端查看调用接口、传参及返回结果(附带图片案例)

目录 1. 打开浏览器开发者工具 2. 使用 Network 面板 3. 查看具体的API请求 a. Headers b. Payload c. Response d. Preview e. Timing 4. 实际操作步骤 5. 常见问题及解决方法 a. 无法看到API请求 b. 请求失败 c. 跨域问题(CORS) 作为一名后端工程师,理解前端如何调用接口、传递参数以及接收返回值是非常重要的。下面将详细介绍如何通过浏览器开发者工具(F12)查看和分析这些信息,并附带图片案例帮助你更好地理解。 1. 打开浏览器开发者工具 按下 F12 或右键点击页面选择“检查”可以打开浏览器的开发者工具。常用的浏览器如Chrome、Firefox等都内置了开发者工具。下面是我选择我的一篇文章,打开开发者工具进行演示。 2. 使用

Cursor+Codex隐藏技巧:用截图秒修前端Bug的保姆级教程(React/Chakra UI案例)

Cursor+Codex隐藏技巧:用截图秒修前端Bug的保姆级教程(React/Chakra UI案例) 前端开发中最令人头疼的莫过于那些难以定位的UI问题——元素错位、样式冲突、响应式失效...传统调试方式往往需要反复修改代码、刷新页面、检查元素。现在,通过Cursor编辑器集成的Codex功能,你可以直接用截图交互快速定位和修复这些问题。本文将带你从零开始,掌握这套革命性的调试工作流。 1. 环境准备与基础配置 在开始之前,确保你已经具备以下环境: * Cursor编辑器最新版(v2.5+) * Node.js 18.x及以上版本 * React 18项目(本文以Chakra UI 2.x为例) 首先在Cursor中安装Codex插件: 1. 点击左侧扩展图标 2. 搜索"Codex"并安装 3. 登录你的OpenAI账户(需要ChatGPT Plus订阅) 关键配置项: // 在项目根目录创建.