- 博客(11)
- 收藏
- 关注
原创 Langfuse线程泄露问题
通过py-spy监控发现,线程数量一直增加,但是都是处于idle状态,并且运行栈里出现了langfuse,由此可以断定langfuse callback的这个实现有线程泄露的问题。查看Langfuse callback的源代码发现,如果callback的构造函数没有传入stateful_client,则会新建一个langfuse.Langfuse对象,而这个对象内部包含一个task manager会创建一个线程池。这样所有callback将使用全局的task manager的线程池,避免线程泄露。
2025-04-09 15:18:22
64
原创 py-spy使用的常见问题
3. 依赖于操作系统的SYS_PTRACE能力,如果没有设置SYS_PTRACE,会遇到"Permission denied (os error 13)" 错误。py-spy 是一个用于 Python 应用程序性能分析的工具,它可以在不修改代码的情况下,实时监控和分析程序的 CPU 使用、内存占用等资源消耗情况。2. 需要和监控目标进程使用相同的python解释器。# 或者永久修改(需要重启)1. 需要root权限才能运行。
2025-04-07 14:43:26
95
原创 P-tuning详解
但是P-tuning与提示词微调有一个显著的不同,提示词微调只把额外的向量加在了输入向量的前面,而P-tuning可以在输入向量的前面和后面都加入额外的提示词向量,这增加了微调的能力。除此以外,P-tuning还提出了新的Prompt encoder,用来建模虚拟提示词的词嵌入函数f(Pi)=hi,并尝试用长短期记忆网络(LSTM)或多层感知器(MLP)来实现Prompt encoder。下面是一段示例代码。首先要载入基础模型和分词器的,下面是一段示例代码,用于载入bert模型用于文本分类任务。
2025-01-06 22:39:54
652
原创 提示词微调(Prompt tuning)
提示词设计和提示词搜索的方法往往不太稳定,而且不能通过最优化算法对其进行优化,无法确定得到的提示词就是最优解。而提示词微调是一种连续提示词方法,它的主要思想是:固定整个预训练模型参数,只允许将每个下游任务的额外k个可更新的tokens(称之为软提示词soft prompt)前置到输入文本中。因为是连续提示词,它并不关注这些词是什么,而只关心它们的语义(即词嵌入向量),所以,实际上它是在正常输入文本的词嵌入向量序列的前面加入一个额外的向量序列,这个向量序列可以由后向传播算法根据特定任务的标记数据反推得到。
2025-01-06 22:25:02
768
原创 提示词杂记
需求:对一句话进行分类,如果不满足预置的分类,则由大模型写一个5个字以内的label。尽可能使用预置的分类。刚开始直接把整个需求写成一个提示词,结果大模型会更倾向于自己写一个label,因为这个label于句子的语义更契合,大模型会认为概率更大。为了尽可能使用预置的分类,可以将提示词拆分。第一个提示词让大模型进行分类,如果不满足预置的分类,则返回“其他”。其他是相对最不相关类,如果大模型认为其他类的概率最高,那说明预置的分类真的不合适。再用第二个提示词会对“其他”类写一个5个字以内的label。
2024-09-09 23:01:28
284
原创 flash-attn windows环境安装踩坑日记
因为官方发布的wheel是linux版的,所以在windows环境下安装时需要编译源码。具体选择哪个下载,需要先运行pip debug --verbose,根据输出里面的Compatible tags来选择兼容的wheel文件。下载相应的wheel文件并安装:pip install "flash_attn-2.4.1+cu121torch2.1cxx11abiFALSE-cp39-cp39-win_amd64.whl"flash-attn python包是对Flash attention的开源实现。
2024-01-17 10:23:20
15263
12
原创 前缀微调(Prefix tuning)
例如,如果希望LM生成一个词(例如,群众),可以在上下文中添加其常见的搭配(例如,人民),语言模型将对所需的词分配更高的概率。通过对比实验发现,前缀微调在使用更少的参数的情况下(0.1%的参数),得到了与全量微调和适配器微调(3%的参数)相当的效果;下面是一个代码示例。如果flat为False进行训练,在保存模型时需要调用eject_prefix_tuning方法,传入之前训练用的名称,这样会把训练时用的多层感知网络删除,从而节省存储空间,之后推理时也能使用更少的参数,更快推理。
2024-01-03 10:16:10
3556
1
原创 适配器微调(Adapter tuning)
如图 2所示, (Neil Houlsby, 2019)给出了Adaptor tuning与传统迁移学习(调整靠近输出的几层)在调整同等数量的参数的情况下,模型性能的差别。在训练过程中,一般只调整图 4中绿色的部分,包括适配器的下投影前馈层、上投影前馈层、非线性层以及Transformer模块中的两个归一层的参数。最后,设置好训练参数,即可通过adapters包的AdapterTrainer类进行训练了,再调用trainer的save_model方法即可把训练好的适配器(不包括基础模型)保存在本地。
2024-01-03 09:57:26
6990
2
原创 参数高效微调方法(Parameter-Efficient Fine-Tuning,PEFT)概述
它也算是一种迁移学习的方法,但是与传统的迁移学习方法不同的是,它是专门针对大模型设计的,通常会保持原有模型的参数不变,以某种方式添加少量新的参数,通过调整这些新的参数使模型适应特定任务,同时保留底层通用的语义表示。而传统的迁移学习方法一般要达到比较好的效果,都不得不调整一部分原有模型的参数。目前,参数高效微调因其调整的参数占比很小(小于10%甚至0.1%),所需运算资源少,在同时需要出来很多下游任务时,节省大量存储空间,在目的单一的较小的样本集里(小于预训练语料的10%),已逐渐成为主流的微调方法。
2024-01-03 09:29:27
2846
1
原创 chatGLM2 p-tuning踩坑全纪录
ChatGLM2-6B项目代码的ptuning子目录下有所有p-tuning代码。在site-packages中找到torchrun-script.py,删除首行内容#!需要升级attrs到22.2.0以上,conda只支持到22.1.0,需要使用pip install --upgrade attrs来升级。运行命令安装cchardet:conda install cchardet。
2023-08-23 11:33:43
785
2
原创 Windows部署chatGLM2-6B踩坑全记录
尝试重装transformers模块无果,后来发现是模型的路径不能用带“.”的相对路径,后改用绝对路径解决了这个问题。为了部署方便采用anaconda,全程使用conda install代替pip install,因为它不仅可以安装依赖的python包,还能同时安装依赖的动态链接文件。1. 执行 python web_demo.py,发现没有GCC命令,需要安装gcc和openmp,正好TDM-GCC可以顺带安装openmp,于是下载了TDM-GCC,安装过程中需要勾选安装openmp。
2023-08-23 11:19:00
506
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人