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

LayerSkip – Meta推出加速大型语言模型推理过程的技术

我们提出的 LayerSkip 是一种端到端的解决方案,可加快大型语言模型(LLM)的推理速度。 首先,在训练过程中,我们采用了层间丢弃技术(layer dropout),早期层间丢弃率较低,后期层间丢弃率较高。 其次,在推理过程中,我们证明这种训练方法提高了早期退出的准确性,而无需在模型中添加任何辅助层或模块。 第三,我们提出了一种新颖的自推测解码方案,即在早期层退出,并通过模型的其余层进行验证和校正。 与其他推测式解码方法相比,我们提出的自推测式解码方法占用的内存更少,并能从草稿和验证阶段的共享计算和激活中获益。 我们在不同大小的 Llama 模型上进行了不同类型的训练实验:从头开始预训练、持续预训练、在特定数据域上进行微调,以及在特定任务上进行微调。 我们实施了推理解决方案,结果表明,CNN/DM 文档的摘要速度提高了 2.16 倍,编码速度提高了 1.82 倍,TOPv2 语义解析任务的速度提高了 2.0 倍。 我们在 https://github.com/facebookresearch/LayerSkip 开源了我们的代码。

在这里插入图片描述

快速上手

$ git clone git@github.com:facebookresearch/LayerSkip.git
$ cd LayerSkip

创建环境

$ conda create --name layer_skip python=3.10
$ conda activate layer_skip$ pip install -r requirements.txt

访问模型: 为了观察加速情况,您需要访问使用 LayerSkip 配方训练过的 LLM。 我们在 HuggingFace 上提供了 6 个检查点,它们是使用 LayerSkip 配方持续预训练的不同 Llama 模型:

  • facebook/layerskip-llama2-7B
  • facebook/layerskip-llama2-13B
  • facebook/layerskip-codellama-7B
  • facebook/layerskip-codellama-34B
  • facebook/layerskip-llama3-8B
  • facebook/layerskip-llama3.2-1B

代码

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from copy import deepcopycheckpoint = "facebook/layerskip-llama3.2-1B"
early_exit = 4
device = "cuda" if torch.cuda.is_available() else "cpu"
prompt = "typing import List\ndef bucket_sort(A: List):"model = AutoModelForCausalLM.from_pretrained(checkpoint, device_map="auto", use_safetensors=True, torch_dtype=torch.bfloat16)
tokenizer = AutoTokenizer.from_pretrained(checkpoint)generation_config = model.generation_configweights_memo = {id(w): w for w in model.parameters()}
assistant_model = deepcopy(model, memo=weights_memo) # Clone main model with shared weights
assistant_model.model.layers = assistant_model.model.layers[:early_exit] # Apply early exit
del assistant_model.model.layers[early_exit:]inputs = tokenizer(prompt, return_tensors="pt").to(device)outputs = model.generate(**inputs, generation_config=generation_config, assistant_model=assistant_model, max_new_tokens=512)
print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])

或者Torchrun

$ torchrun generate.py --model facebook/layerskip-llama2-7B \--sample True \--max_steps 512

LayerSkip的项目地址

  • GitHub仓库:https://github.com/facebookresearch/LayerSkip
  • HuggingFace模型库:https://huggingface.co/collections/facebook/layerskip-666b25c50c8ae90e1965727a
  • arXiv技术论文:https://arxiv.org/pdf/2404.16710

感谢大家花时间阅读我的文章,你们的支持是我不断前进的动力。期望未来能为大家带来更多有价值的内容,请多多关注我的动态!

http://www.lryc.cn/news/465535.html

相关文章:

  • 环境变量与本地变量(Linux)
  • 【完-网络安全】Windows防火墙及出入站规则
  • Vue学习记录之十七 css中样式穿透及新特征介绍
  • Nature 正刊丨海洋涡旋中常见的地下热浪和寒潮
  • 代码随想录算法训练营第六十二天| prim算法,kruskal算法
  • Newstar_week1_week2_wp
  • 今天我们研究一段代码(异或位运算)
  • pycharm中使用ctrl+鼠标滚轮改变字体大小
  • 【算法-动态规划】打家劫舍专题
  • 关于技术管理者的一些思考
  • Alpha-CLIP: A CLIP Model Focusing on Wherever You Want CVPR 2024
  • Golang | Leetcode Golang题解之第495题提莫攻击
  • 04 go语言(golang) - 变量和赋值过程
  • 语言/图像/视频模型一网打尽!BigModel大模型开放平台助力开发者轻松打造AI新应用!
  • Go语言Linux环境搭建以编写第一个Go程序
  • 使用 Go 构建一个最小的 API 应用
  • MySQL 日常维护指南:常见任务、频率及问题解决
  • oracle ORA-24920:列大小对于客户机过大
  • 使用 Docker compose 部署 Nacos(达梦数据库)
  • 人工智能 | 阿里通义千问大模型
  • Windows环境下Qt Creator调试模式下qDebug输出中文乱码问题
  • java防止表单重复提交的注解@RepeatSubmit
  • HTTP快速入门
  • Nacos简介
  • 基于深度学习的稳健的模型推理与不确定性建模
  • C语言 sizeof 的介绍,以及sizeof计算数组名、 数组首地址、数组的元素之间的区别
  • 深入理解Oracle闪回技术
  • Go 语言初探
  • 使用ROS资源编排一键部署LNMP建站环境,手动整理教程
  • 猎板PCB镍钯金工艺你了解多少?