• Stars
    star
    282
  • Rank 146,549 (Top 3 %)
  • Language
    Python
  • Created over 1 year ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

LLMPruner:大语言模型裁剪工具

项目简介

微信公众号【YeungNLP】文章:LLMPruner:大语言模型裁剪工具

LLMPruner是一个大语言模型裁剪工具,通过对大语言模型的冗余词表进行裁剪,减少模型参数量,降低显存占用,提升训练速度,并且能够保留预训练中学习到的知识。

大语言模型(LLM, Large Language Model)犹如雨后春笋般,其虽然效果惊艳,但参数量巨大,让普通玩家望而却步。 如今的大语言模型大多为多语种大预言模型(Multilingual Large Language Model),如LLaMA、mT5、Bloom等,其词表规模巨大,占据非常大部分的模型参数,如Bloom具有25万词表。 在训练模型时,词表权重将会消耗非常大的显存,降低训练速度,产生OOM的现象。

然而在许多下游任务中,我们往往只需要使用到一两种语言,例如在中文场景中,一般只会用到中英文。 我们可以对大语言模型的词表进行裁剪,只留下所需的部分,这样不仅能够充分保留模型的预训练知识,并且能够使用更少的显卡进行下游任务的finetune,提升训练效率。

裁剪模型分享

裁剪后的模型权重地址:权重分享

Bloom

对Bloom进行词表裁剪,保留常用的中英文token,词表由250880将至46145,缩减为原来的18.39%。

裁剪模型 原模型 参数量比例
YeungNLP/bloom-396m-zh bigscience/bloom-560m 70.96%
YeungNLP/bloom-820m-zh bigscience/bloom-1b1 77.13%
YeungNLP/bloom-1b4-zh bigscience/bloom-1b7 81.14%
YeungNLP/bloom-2b6-zh bigscience/bloom-3b 86.48%
YeungNLP/bloom-6b4-zh bigscience/bloom-7b1 90.81%
YeungNLP/bloomz-396m-zh bigscience/bloomz-560m 70.96%
YeungNLP/bloomz-820m-zh bigscience/bloomz-1b1 77.13%
YeungNLP/bloomz-1b4-zh bigscience/bloomz-1b7 81.14%
YeungNLP/bloomz-2b6-zh bigscience/bloomz-3b 86.48%
YeungNLP/bloomz-6b4-zh bigscience/bloomz-7b1 90.81%
YeungNLP/bloomz-6b4-mt-zh bigscience/bloomz-7b1-mt 90.81%

使用介绍

对Bloom进行词表裁剪:

from pruners.vocabulary_pruner import BloomVocabularyPruner

# 需要进行裁剪的模型路径
model_name_or_path = 'bigscience/bloom-560m'
# 自己制作的词表的路
new_tokenizer_name_or_path = 'YeungNLP/bloom-560m-zh'
save_path = 'path-to-save'
pruner = BloomVocabularyPruner()
# 裁剪
pruner.prune(model_name_or_path, new_tokenizer_name_or_path, save_path)
# 检查裁剪的模型与原模型是否一致
pruner.check(model_name_or_path, save_path, text='长风破浪会有时')

使用模型:

from transformers import BloomTokenizerFast, BloomForCausalLM
tokenizer = BloomTokenizerFast.from_pretrained('YeungNLP/bloom-1b4-zh')
model = BloomForCausalLM.from_pretrained('YeungNLP/bloom-1b4-zh')
print(tokenizer.batch_decode(model.generate(tokenizer.encode('长风破浪会有时', return_tensors='pt'))))

关注我们

More Repositories

1

Firefly

Firefly: 大模型训练工具,支持训练Qwen2、Yi1.5、Phi-3、Llama3、Gemma、MiniCPM、Yi、Deepseek、Orion、Xverse、Mixtral-8x7B、Zephyr、Mistral、Baichuan2、Llma2、Llama、Qwen、Baichuan、ChatGLM2、InternLM、Ziya2、Vicuna、Bloom等大模型
Python
5,493
star
2

GPT2-chitchat

GPT2 for Chinese chitchat/用于中文闲聊的GPT2模型(实现了DialoGPT的MMI思想)
Python
2,972
star
3

CPM

Easy-to-use CPM for Chinese text generation(基于CPM的中文文本生成)
Python
525
star
4

Firefly-LLaMA2-Chinese

Firefly中文LLaMA-2大模型,支持增量预训练Baichuan2、Llama2、Llama、Falcon、Qwen、Baichuan、InternLM、Bloom等大模型
Python
390
star
5

CLIP-Chinese

中文CLIP预训练模型
Python
374
star
6

QQMusicSpider

基于Scrapy的QQ音乐爬虫(QQ Music Spider),爬取歌曲信息、歌词、精彩评论等,并且分享了QQ音乐中排名前6400名的内地和港台歌手的49万+的音乐语料
Python
310
star
7

ClipCap-Chinese

基于ClipCap的看图说话Image Caption模型
Python
267
star
8

LEBERT-NER-Chinese

基于词汇信息融合的中文NER模型
Python
160
star
9

LongQLoRA

LongQLoRA: Extent Context Length of LLMs Efficiently
Python
154
star
10

SimCSE

SimCSE有监督与无监督实验复现
Python
138
star
11

OFA-Chinese

transformers结构的中文OFA模型
Python
118
star
12

PAMAE

使用Python复现SIGKDD2017的PAMAE算法(并行k-medoids算法)/The Python implementation of SIGKDD 2017's PAMAE algorithm (parallel k-medoids algorithm)
Python
33
star
13

TankBattle

基于Netty的联机版坦克大战
Java
17
star
14

Shopee-Price-Match-Guarantee

对比学习 虾皮同款商品匹配
Python
13
star