LLaMA大语言模型

什么是LLaMA,如何获取权重文件以及HuggingFace格式转换。

LLaMA大语言模型
大羊驼-由Midjourney生成

LLaMA是什么

LLaMA是由Meta AI发布的大语言系列模型,完整的名字是Large Language Model Meta AI。Llama这个单词本身是指美洲大羊驼,所以社区也将这个系列的模型昵称为羊驼系模型。

Introducing LLaMA: A foundational, 65-billion-parameter language model
Today, we’re releasing our LLaMA (Large Language Model Meta AI) foundational model with a gated release. LLaMA is more efficient and competitive with previously published models of a similar size on existing benchmarks.

LLaMA官方宣告

LLaMA按照参数量的大小分为四个型号:LLaMA-7B、LLaMA-13B、LLaMA-30B与LLaMA-65B。这里的B是billion的缩写,指代模型的参数规模。故最小的模型7B包含70亿个参数,而最大的一款65B则包含650亿个参数。

根据OpenAI所述,大语言模型如GPT的训练过程大致可以分为四个阶段,其第一个阶段预训练所耗费的资源几乎占据了整个过程的99%——数千个GPU算力堆积在这里。这种规模的资源消耗远远超过普通人甚至是大部分公司的供应能力。而LLaMA的开源实际上为开源社区解决了参与的“门槛”问题。以LLaMA为基础,后续衍生出了多个“羊驼家族”模型如Vicuna(小羊驼)和Alpaca(羊驼)。

LLaMA的获取方式

LLaMA本身的代码开源在Github,但是其权重需要向Meta在线申请。根据社区的反馈来看,后续的申请大多石沉大海。好在其权重已经在互联网上流传开来。善用搜索引擎不难找到。下载完成后的文件大概是这样:

LLaMA
├── 13B
│   ├── checklist.chk
│   ├── consolidated.00.pth
│   ├── consolidated.01.pth
│   └── params.json
├── 30B
│   ├── checklist.chk
│   ├── consolidated.00.pth
│   ├── consolidated.01.pth
│   ├── consolidated.02.pth
│   ├── consolidated.03.pth
│   └── params.json
├── 65B
│   ├── checklist.chk
│   ├── consolidated.00.pth
│   ├── consolidated.01.pth
│   ├── consolidated.02.pth
│   ├── consolidated.03.pth
│   ├── consolidated.04.pth
│   ├── consolidated.05.pth
│   ├── consolidated.06.pth
│   ├── consolidated.07.pth
│   └── params.json
├── 7B
│   ├── checklist.chk
│   ├── consolidated.00.pth
│   └── params.json
├── llama.sh
├── tokenizer_checklist.chk
└── tokenizer.model

LLaMA权重文件

全部文件加起来的大小约253.2GB。注意使用附带的checklist.chk文件校验文件哈希值。

md5sum -c checklist.chk

LLaMA的HuggingFace格式转换

LLaMA的具体实现来自Meta,其核心Transformer与目前最为繁荣的AI模型社区HuggingFace的具体实现不兼容。因此,使用HuggingFace Transformer的项目在使用LLaMA之前需要将LLaMA原始权重转换为HuggingFace Transformer兼容格式。

HuggingFace官方提供了格式转换脚本,地址如下:

transformers/convert_llama_weights_to_hf.py at main · huggingface/transformers
🤗 Transformers: State-of-the-art Machine Learning for Pytorch, TensorFlow, and JAX. - transformers/convert_llama_weights_to_hf.py at main · huggingface/transformers

运行这个转换脚本需要安装两个依赖项目:PyTorch与Transformer。使用pip安装即可,注意匹配版本。

安装完成后使用如下命令转换格式:

python convert_llama_weights_to_hf.py \
    --input_dir /path/to/downloaded/llama/weights \
    --model_size 7B \
    --output_dir /output/path

LLaMA格式转换

其中 --input_dir 就是上一章节所描述的LLaMA权重目录。 --model_size 为LLaMA模型的参数规格。 --output_dir 顾名思义为转换后模型的保存路径。

后续操作

LLaMA本身具备了大语言模型的基本功能,不过社区在此基础上的后续开发改进了模型的质量、扩充了模型的功能。因此推荐掌握以上两节描述的内容,然后将主要精力放在Vicuna与Alpaca上边。