Giter VIP home page Giter VIP logo

o-lora's Issues

关于MTL

非常好的工作!我想请教下baseline中的MTL是怎么做的呢?是全量微调吗,还是单个LoRA?

ModuleNotFoundError: No module named 'datasets'

请问有人遇到过同样的问题吗?明明环境里有datasets这个包,但是一直报这个错误:
Traceback (most recent call last):
File "/home/user/ljl_new/O-LoRA/src/run_uie_lora.py", line 29, in
import datasets
ModuleNotFoundError: No module named 'datasets'
Traceback (most recent call last):
File "/home/user/ljl_new/O-LoRA/src/run_uie_lora.py", line 29, in
import datasets
ModuleNotFoundError: No module named 'datasets'

关于数据集加载的报错

image

FileNotFoundError: [Errno 2] No such file or directory: 'G:/code/O-LoRA-main/O-LoRA-main/logs_and_outputs/order_1/outputs/1-dbpedia/29ec996b8e1ae5297860b8d946af1b38/uie_dataset_lora/default-d0dfd2a00d317be8/2.0.0/c490e7f13dec80785fc335819009163a45c86ae2816040c8d81800108e 7e4374/uie_dataset_lora-train-00000-00000-of-NNNNN.arrow'

raise DatasetGenerationError("An error occurred while generating the dataset") from e

datasets.builder.DatasetGenerationError: An error occurred while generating the dataset

请问下我在运行order_1.sh时在数据集加载出现文件No such file or directory,经检查后发现outputs下有默认创建的文件夹,但是没有自动生成uie_dataset_lora-train-00000-00000-of-NNNNN.arrow导致了报错,请问该如何解决,谢谢

关于code的疑惑

你好,非常感谢您杰出的工作。我在阅读您的code的时候有2点疑惑:

  1. 关于正则化那部分,您只是将本次的loranew_A与上一次的lora_A取了正则化,而您的paper里是让本次loranew_A与之前所有的lora_A取正则,我的理解是否有问题?
  2. 我是nlp新手,不是很了解您的paper给出的avg的指标是什么,或者说计算的损失函数是什么?
    谢谢。

关于长序列任务上的讨论

感谢作者优秀的工作!想请教一下关于O-LoRA在更challenging的长序列任务上(large number of tasks)性能表现与PerTaskFT和MTL有差距的原因可能有哪些?期待您的回复!

有order4,5,6的脚本吗?

您的贡献非常的重要,十分感谢呀!但是,我看咱们的论文使用了15个数据集。它使用的是order4,5,6.但是,在咱们的代码中,没有找到order4,order5,order6的脚本,等否分享一下呢?

关于LoRA部分修改的问题

您好,我想问下在加载PEFTModel之后lora_A的输出维度为什么是0,是在训练lora_new的时候没有让之前的lora输出特征吗,还想请问一下您都在peft的哪些文件上做了修改呢?

关于loss_mask

作者您好,请问为什么不直接将指令微调时输入样例的非label部分直接填充为-100,而要额外使用一个loss_mask,这样也不需要重载一个LlamaForCausalLM_with_lossmask类了。是有其他考虑我没注意到吗?感谢~

关于SeqLoRA和IncLoRA

感谢您的工作!想请问一些小问题。请问SeqLoRA和IncLoRA的区别,是否在于:SeqLoRA在每次训练完一个任务后不会把lora和模型参数合并;而IncLoRA会把lora和模型参数合并,并且使用一个新的lora训练新任务?

可能可以简化代码?

此处

orthogonal_loss = 0.

由于这边是跟没有梯度的lora(old)来计算正交,那直接在上一步把lora(old)save为pth是不是可以避免修改peft库了

import torch

# 假设 self.model 是你的模型
stacked_params = {}

for name, param in self.model.named_parameters():
    if "lora_" in name:
        stacked_params[name] = param.data.clone()  # 使用 clone() 复制参数并避免共享内存

# 保存堆叠的参数到文件
torch.save(stacked_params, "path/to/stacked_params.pth")

然后在trainer类里面加载

# 初始化一个字典来存储匹配的模块和对应的参数
matched_modules = {} #load pth

for name, param in self.model.named_parameters():
    if "lora_A" in name:
          # 匹配的模块名称和对应的参数
          param_ = matched_modules[name]

          orthogonal_loss += torch.abs(torch.mm(param, param_.T)).sum()  # [r * dim] * [dim * r]
          break  # target modules have been matched

大致这个意思

是不是就可以避免修改PEFT代码,方便很多?

实验结果复现

您好,请问一下,关于实验结果的复现,是直接执行给定的scripts里的文件吗,还是需要调整参数?

llama2 结果复现

感谢作者的工作,提供了一个解决 cl 灾难性遗忘的思路。
我采用 codebase 提供的 llama2 的脚本,跑出来的结果直接坏掉了,这是什么原因呢,跑实验的过程中,有什么要点需要注意么,或者参数设置上需要做些什么调整呢?是 olora 的 lamda 参数设置太小导致过多的遗忘么?下面是我在 tune order2 时的逐 task 结果
***** predict metrics *****
epoch = 1.0
predict_exact_match = 97.6184
predict_exact_match_for_TC = 97.6184
predict_exact_match_for_dbpedia = 97.6184
***** predict metrics *****
epoch = 1.0
predict_exact_match = 43.2171
predict_exact_match_for_SC = 52.9868
predict_exact_match_for_TC = 33.4474
predict_exact_match_for_amazon = 52.9868
predict_exact_match_for_dbpedia = 33.4474
***** predict metrics *****
epoch = 1.0
predict_exact_match = 26.8114
predict_exact_match_for_SC = 3.3289
predict_exact_match_for_TC = 38.5526
predict_exact_match_for_amazon = 3.3289
predict_exact_match_for_dbpedia = 10.2105
predict_exact_match_for_yahoo = 66.8947
***** predict metrics *****
epoch = 0.99
predict_exact_match = 35.3191
predict_exact_match_for_SC = 25.5132
predict_exact_match_for_TC = 38.5877
predict_exact_match_for_agnews = 87.4868
predict_exact_match_for_amazon = 25.5132
predict_exact_match_for_dbpedia = 19.1447
predict_exact_match_for_yahoo = 9.1316

关于数据集

请问一下CL_Benchmark里面是完整数据集吗,我在其他地方下载的数据集和里面的条目不太一样

运行报错

image
请问直接运行的时候这个错是什么原因,要如何改呢?

关于standard benchmark

那个由4个任务组成的benchmark,最近double check了一下发现学习率设得足够小的话,全量微调baseline效果也会非常好(几乎不遗忘),说明这个benchmark对于t5已经没有挑战了,对于后续的大模型同理,所以不建议follow...

如何解决task-id问题

想问一下这个方案是如何实现不依赖于task id来分辨任务种类以匹配参数的呢?可不可以理解为如"TC""SC"发挥的就是等价于task id?感谢解答!

Loss在yahoo数据集上骤降为0

你好,我正在用scripts_llama/order_1.sh在llama-7b模型上训练,每次在yahoo数据集上训练时都会遇到loss直接降到0的情况(其他数据集上正常),能帮忙看看有什么问题吗?用的80G显存单卡A100,训练batch size为8,测试batch size为32,梯度累积步长为1.
ab4e457fac6cad203346a064a515ef6

关于Lora秩的变化

感谢您的工作,非常的nice!但还是有几个问题想请教一下:

  1. 在save_and_load.py的Line 36处增加了当前Lora和previous Lora的合并,用的是concat的方式,如果说按照默认的rank=8来看,是不是concat方式会随着任务数量的增加,导致next task的rank增长?比如第二次loranew的rank就变为16了?
  2. 理论上看,用add的方式是不是也是等价的?

我还没成功run起代码来,hf被墙很烦,所以这些问题还暂时没有亲手验证,烦请作者帮忙解惑一下啦~

代码运行时在loss那里报错

屏幕截图 2024-05-01 193748
而且do_grad_scaling这个我看在脚本中也没有。(上面的运行情况 是我手动设为True之后的情况)
请问do_grad_scaling和scaler是在哪里定义了呢?

关于lora_b矩阵的更新问题

作者您好,我想请教一下关于工作里面lora_b矩阵更新的问题。论文里只写了它也是由lora_a张成的子空间中的向量构成,但是在训练过程中是如何保证这一点并更新加权系数的呢?我在代码中只找到了这样的片段,没看明白具体是如何完成要求的
image

llama2的结果比论文中的llama1的结果低

作者您好,您的工作非常地好。我看您的论文中使用的是llama-7b,运行的order-1的standard cl的结果是76.8,但是我用llama2运行scripts_llama/order_1.sh的时候却得到如下的结果:

{
    "epoch": 0.99,
    "predict_exact_match": 43.2072,
    "predict_exact_match_for_SC": 14.9605,
    "predict_exact_match_for_TC": 52.6228,
    "predict_exact_match_for_agnews": 57.8553,
    "predict_exact_match_for_amazon": 14.9605,
    "predict_exact_match_for_dbpedia": 59.3553,
    "predict_exact_match_for_yahoo": 40.6579,
    "predict_gen_len": 420.8973,
    "predict_global_step": 62,
    "predict_loss": 0.0,
    "predict_rouge1": 53.6793,
    "predict_rouge1_for_SC": 42.9978,
    "predict_rouge1_for_TC": 57.2398,
    "predict_rouge1_for_agnews": 57.8553,
    "predict_rouge1_for_amazon": 42.9978,
    "predict_rouge1_for_dbpedia": 72.6939,
    "predict_rouge1_for_yahoo": 41.1703,
    "predict_rougeL": 53.6792,
    "predict_rougeL_for_SC": 42.9978,
    "predict_rougeL_for_TC": 57.2397,
    "predict_rougeL_for_agnews": 57.8553,
    "predict_rougeL_for_amazon": 42.9978,
    "predict_rougeL_for_dbpedia": 72.6939,
    "predict_rougeL_for_yahoo": 41.1698,
    "predict_runtime": 1397.0294,
    "predict_samples": 30400,
    "predict_samples_per_second": 21.76,
    "predict_steps_per_second": 0.68,
    "train_loss": 20.316666218542284,
    "train_runtime": 218.6764,
    "train_samples": 4000,
    "train_samples_per_second": 18.292,
    "train_steps_per_second": 0.284
}

似乎没有一个数字和论文中对的上。因此我有两个疑问:

  1. 我该看哪一个metric,才是论文中使用的metric?
  2. llama2理论上比llama1更强,但是我运行得到的结果却没有,这可能是什么原因?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.