JJJYmmm Blog
mmcv真的有踩不完的坑,无力吐槽————
简单介绍LoRA,并对LoRA官方源码进行解读,修复了一个bug(可能) Github: https://github.com/microsoft/LoRA Arxiv: https://arxiv.org/abs/2106.09685 简单介绍 在LLM微调领域常常听到LoRA及其各种变体,一直以来的印象就是参数量少,不影响推理。今天彻底看看相应的论文和实现。 总结LoRA其实很容易,整篇论文除去实验,只需要一张图和一个公式。 $$ h = W_0x + \Delta Wx = W_0x + B A x \label{eq1} \tag{1} $$ 简单来说,LoRA的灵感来自Aghajanyan等人1,他们发现预训练LLM具有较低的“instrisic dimension”,尽管随机投影到较小的子空间,但仍然可以有效地学习。 也就意味着式$\eqref{eq1}$中的$W$可能是低秩的,那么合理假设:在下游任务的微调过程中,模型权重改变量$\Delta W$也可能是低秩的,那么$\Delta W$就可以使用矩阵$A,B$进行建模。例如$A = matrix(d,r), B = m
DDPM中建模的$q(\mathbf{x}_{t-1} \vert \mathbf{x}_t, \mathbf{x}_0)$满足正态分布, $$ q(\mathbf{x}_{t-1} \vert \mathbf{x}_t, \mathbf{x}_0) = \mathcal{N}(\mathbf{x}_{t-1}; \tilde{\boldsymbol{\mu}}(\mathbf{x}_t, \mathbf{x}_0), \tilde{\beta}_t \mathbf{I}) \\ \tilde{\beta}_t = \frac{1 - \bar{\alpha}_{t-1}}{1 - \bar{\alpha}_t} \cdot \beta_t $$ DDIM中建模的$q_\sigma(\mathbf{x}_{t-1} \vert \mathbf{x}_t, \mathbf{x}_0)$如下,第一个等式二三步用到了重参数技巧和多个独立高斯分布的等价形式, $$ \begin{aligned} \mathbf{x}_{t-1} &= \sqrt{\bar{\alpha}_{t-1}
最近看到一个写的挺好的多任务框架(https://github.com/SwinTransformer/AiT,参考了detectron2),分享一下~ 多任务训练一般分为两种:data mixing 和 batch mixing。简单来说,对于前者,一个batch中的样本可以来自不同任务,而后者一个batch中任务都是一样的。两者相比,后者实现更加容易,效率更高,并且做数据增强也更方便一点(由Pix2Seq提出,但其实数据增强我认为并不是两者的主要差异)。 先给出我写的一个batch mixing的例子(来自JJJYmmm/Pix2SeqV2-Pytorch): def get_multi_task_loaders(tokenizer,tasks): assert set(tasks) <= set(['detection', 'keypoint', 'segmentation', 'captioning']) train_loaders = {} valid_loaders = {} if 'detection' in tasks:
复现多卡训练项目经常会遇到一些匪夷所思的问题,包括但不限于numpy<1.2.0 && numpy>=1.2.0,OSError: [Errno 12]。以下给出尽可能"少犯错"的几个步骤: 拿到一个项目,首先检查包依赖(如requirements.txt),如果使用conda管理虚拟环境,建议每个项目都创建一个env,conda一般会存有各个包的cache,所以不用担心重新搭建一个环境的时间成本;如果作者提供了docker,优先使用docker 有些包会存在历史依赖,最经典的是numpy.float/numpy.int在numpy>=1.2.0后弃用,而有些包如boundary-iou还是沿用了旧版本的写法,所以遇到这种情况直接对着报错改包就行(如np.float->np.float64),当然也可以尝试版本回退 对于深度学习项目,如果允许先拿一张卡跑,因为多卡多进程debug信息很难处理 对于dataloader,统一先设置num_workers=0,有时候线程过多也会导致错误(例如共享内存shm不足导致的bus error)
Axuanz
Updating as per fate.