当前位置: 首页 > news >正文

llamafactory-记录一次消除模型随机性的成功过程

出发点

在使用 LLamafactory 部署生成式模型(如 LLaMA、Qwen 等)时,开发者常会遇到以下问题:

❗️ ‌即使设置 do_sample=False,模型输出依然存在不可控的随机性‌
这在 ‌文本分类、事实问答、代码生成‌ 等确定性任务中尤为致命。
本文将从一系列错误中,找到一套成功的解决方案。

部署+调用

配置项

我是以上述的方式配置的LLamafactory,文本分类的数据经过lora微调后,使用LLamafactory-cli进行部署,部署使用了vllm,调用方式调用方式

generation_config.json

在运行llamafactory-cli api ./data/qwen2.5-7b_lora_inference.yaml时可以看到有从模型配置文件中加载generation_config.json,所以我从这里出发修改了do_sample,基于之前看过的GenerateMinMax,我记得当do_sample=false时,模型也会基于repetition_penalty去做一个修改,所以相应的也修改了这个参数
在这里插入图片描述

{"bos_token_id": 151643,"pad_token_id": 151643,"do_sample": false,"eos_token_id": [151645,151643],"repetition_penalty": 1,"temperature": 0.7,"top_p": 0.8,"top_k": 20,"transformers_version": "4.37.0"
}

再次启动时,模型会报以下warning
warning
那我接着做了以下调整,删除了temperature、top_p、top_k

{"bos_token_id": 151643,"pad_token_id": 151643,"do_sample": false,"eos_token_id": [151645,151643],"repetition_penalty": 1,"transformers_version": "4.37.0"
}

可以看到成功加载了,但是没有了do_sample这个配置项了,我测试了一下文本分类这个任务,还是有随机性的,所以没有修改成功。
成功加载

ChatCompletionRequest

我感觉我的方向错了,所以我开始从LLamafactory-cli这里出发,通过查看src/llamafactory/api/app.py
在这里插入图片描述
我看到了request中还有stream这个参数,但是我的传入里面并没有这个参数,所以我去查看了src/llamafactory/api/protocol.py
在这里插入图片描述
再一次看到了do_sample,默认是None,那是这里的问题吗?
我去调用接口的地方尝试加入这个参数
在这里插入图片描述
然后就得到了报错
在这里插入图片描述
那我只能把这里取消,然后另找道路,比如直接在定义的地方改
在这里插入图片描述
然后发现还是不行,那我想这个参数是在什么地方被用到了呢?是什么时候传入到generate的呢?
通过src/llamafactory/api/app.py中可以看到request传入了src/llamafactory/api/chat.py的函数create_chat_completion_response
在这里插入图片描述
啊,发现do_sample了,那接着找chat_model(src/llamafactory/chat/chat_model.py)

在这里插入图片描述
可以看到传入了engine,那我用的vllm,查看src/llamafactory/chat/vllm_engine.py
通过在这里插入图片描述
那看一下_generate
在这里插入图片描述
不知道为什么没有do_sample这个参数,坑了。。。

huggingface

那我们去看一下huggingface方式呢src/llamafactory/chat/hf_engine.py
在这里插入图片描述

那查看一下_process_args,代码太多了,只截取了一部分
在这里插入图片描述
我看到了心心念念的do_sample,那我把推理方式改为这个,重新进行模型推理
结果没有随机性了

那如果把generation_config.json改为原有的影响这个结果吗?
结果是没有影响

所以目前的结论是需要修改request中的do_sample,而且当前只支持huggingface推理方式

http://www.xdnf.cn/news/421867.html

相关文章:

  • VSCode中Node.js 使用教程
  • WPF自定义控件开发全指南:多内容切换与动画集成
  • 基于深度学习的水果识别系统设计
  • 蛋白设计 ProteinMPNN
  • go语言学习进阶
  • Telnet 类图解析
  • 题海拾贝:P1833 樱花
  • 不用服务器转码,Web端如何播放RTSP视频流?
  • 多线程代码案例-1 单例模式
  • 在spark中配置历史服务器
  • 【C++】深入理解 unordered 容器、布隆过滤器与分布式一致性哈希
  • 拓扑排序详解
  • H5S 视频监控AWS S3 对象存储
  • BGP实验练习2
  • Github 2025-05-13 Python开源项目日报 Top10
  • 从零开始:使用 Vue-ECharts 实现数据可视化图表功能
  • 详解Windows(十一)——网络连接设置
  • 解锁ozon运营新路径:自养号测评技术如何实现降本增效
  • CSS结构性伪类、UI伪类与动态伪类全解析:从文档结构到交互状态的精准选择
  • 【Flask全栈开发指南】从零构建企业级Web应用
  • Vue3+uniapp 封装axios
  • 《猜拳游戏》
  • 深入学习Zookeeper的知识体系
  • 软件测试服务公司分享:国产化适配测试的重要性和关键要素
  • 如何在 CentOS 7 虚拟机上配置静态 IP 地址并保持重启后 SSH 连接
  • ios remote debut proxy 怎么开启手机端调试和inspect
  • C++ string数据查找、string数据替换、string子串获取
  • Rollup入门与进阶:为现代Web应用构建超小的打包文件
  • 【23种设计模式】分类结构有哪些?
  • Java——集合基础