Learning Rate 和 Batch Size 的关系

Learning Rate 和 Batch Size 的关系 现代的大模型的 batch size 都是如何调整的呢?感觉 llama2 无论如何都是 4M tokens 一个 batch,这是有什么深思熟虑,还是就是为了显存呢? 跟显存无关。4M tokens 也是经过梯度累加的, acc step 增加不会增加显存 从 Infra 的角度,增加 Global Batch Size 总可以提升训练速度,因为减少了模型更新的总次数。 只要能保证模型收敛的效果, batch size 越大越好 在 OpenAI An Empirical Model of Large-Batch Training 中提到 大致遵循平方根关系 多机多卡并行方案 如果是多机多卡且卡间有 NVLink 链接,机间以 InfiniBand链接,则 transformer trainer + deepspeed zero++ HSDP + flash attention + bf16 + activation checkpointing 是一个不错的配置,适用于模型经过 zero3 sharding 之后可以装进一台机器那张卡的情况 Megatron-LLM (一个支持了LLaMA的Megatron-LM的fork);长seqlen的情况下,开sequence parallel + gradient checkpoint, 4xA100 40G就就能上16k的window HSDP: 一台 node 内部模型做 fsdp,不同 node 之间做 ddp....

November 19, 2023 · 2 min · 222 words · Me

为什么大模型普遍选用更宽而不是更高的模型架构

为什么大模型普遍选用更宽而不是更高的模型架构 Q:现在大模型为什么普遍选用矮胖(更宽)的模型架构而非瘦高(更高)的呢,能否从理论和工程角度做一个分析? 研究员1:直接能想到的有两点: 堆的太高很可能gradient计算会不稳定,尤其是mixed precision的情况下损失可能更大 有parallel的考虑,layer和layer之间的依赖的是sequential的,没法并行,堆的太高其实对训练速度拖慢太多了,不如每层多干点事,因为同一层内parallel容易的多。 memory方面可能也有concern,不过这个取决于具体实现方式(比如是否checkpointing,I/O offloading,等等)感觉现在的架构也是经过大量实验试出来的。 研究员2:有一个针对moe的说法,模型的知识受益于参数量,智力受益于计算量(该说法参考:https://www.youtube.com/watch?v=2pbvnxdaKaw )。所以moe架构在知识性的任务上表现很高,但是由于计算量本身增加很小所以智力不足。一个值得思考的问题是模型能否通过单纯的加大层数从而提升智力水平,或者说通过提升纵向(层间)计算次数提升智力。 研究员3:Skywork-13B采用瘦高而非矮胖架构的原因是,在控制参数量的情况下实验发现瘦高一些的模型架构泛化性能更好。从Infra的角度,理论FLOPs只取决于模型实际激活参数量,跟layer数量无关; 在目前的LLM中增加layer数量并不会增加并行难度。hidden state超过4096, micro batch size = 1, 在gemm上就能几乎打满GPU。从分布式并行收益来看,pipeline parallelism收益大于 tensor parallelism, 增加layer数量对pipeline更友好。只是这个瘦高、矮胖的收益趋势肯定不是单调的, 可能是一个二次曲线,所以存在一个最佳的区间范围。 如何实现知识更新 Q:真的很想知道openai是怎么实现知识更新的 研究员1:推荐一个实习的同组peer在CLIP上做了一个continual pretraining的工作:https://arxiv.org/abs/2310.16226 大体上发现如果想更新知识+不遗忘的话,在update knowledge的时候用memory replay(rehearsal)效果不错。一个重点是update的时候不要使用warmup。他文章里还有很多实验细节,但不确定有多少可以迁移到LLM continual pretrain。他这里还发现当训练规模比较大的时候(模型+数据),传统的很多lifelong learning tricks都没啥用了。他的推特对这篇文章有讲解:https://x.com/saurabh_garg67/status/1717571699720483023 。Skywork的stage-2 pretraing (STEM stage)也用了memory replay,有80%数据来自stage 1(自然语言);CodeLlama的两个finetuning阶段分别混了8%和5%的Llama2训练数据作为memory replay。 研究员2:naive的方法是,比如你原先数据停止在2021年,然后你把21-23年的数据拿出来,跟原先的数据混一混然后做continue pretrain,这应该就能成为一个比较好的baseline。但是这里有两个问题,一个是temporal knowledge update,比如23年的总统和24年总统不一定是同一个人,这个在continue pretrain之后,模型要信哪个;另一个就是unlearn,即使模型信了新的总统,那旧的它到底是直接忘掉了呢,还是其实心里还信着只是不说。 研究员3:locate triple-level (Biden, is president of, US) knowledge的weights then edit的文章被follow up work指出其实在multi-hop question还是会暴露出没有遗忘。比如edit之后who is the president of US, model会回答编辑之后的总统(假设奥巴马)。但是你要是问who is the wife of the president of US, model还是会回答Biden的夫人,而非奥巴马的夫人。而且明显能看出即使最优的编辑方法也不能达到批量的knowledge更新,一旦要更新上千个triple-level knowledge,成功率都会低于50%。 另外还有一个思路,是否真的一定需要通过改变model weights来更新knowledge? 面对相关的问题retrieve up-to-date的外部信息到context中,模型对于这些信息的接受度如何?假设model还是记得奥巴马是总统,直接在context里面说现在的总统是biden,模型能不能接受context中、和model本身知识冲突的外部信息并进行运用?...

November 12, 2023 · 2 min · 345 words · Me

Compression Theory for Large Language Models

Compression Theory for Large Language Models Compression theory 或许是目前为止 LLM 最底层的理论,它的核心论点是只要压缩下一个 token 就可以通向 AGI;此理论被 OpenAI / DeepMind / Moonshot 等一线机构的研究者们深入讨论,具体的资料包括但不限于: DeepMind Jake Rae, Compression for AGI OpenAI Ilya Sutskever, An observation on generalization DeepMind Deletang et. al. Language Modeling Is Compression Moonshot 周昕宇, 压缩下一个 token 通向超过人类的智能 Preliminary: Arithmetic coding Arithmetic coding 是一种无损编码数据的算法,它依赖一个概率模型 概率模型对数据的 likelihood 越高,arithmetic coding 压缩率越高 Language modeling as lossless compression 语言模型对数据并不是有损压缩,而是无损 语言模型通过对数据做 arithmetic coding 来压缩数据 gzip 的压缩率是 32%,200K 大小的 Transformer 有 30%,Chinchilla 7B 有 10....

October 28, 2023 · 1 min · 175 words · Me