Facebook Meta ai大模型LIama 2.0和3.0本地部署教程

AI大模型现在激战越来越凶残,Facebook大模型LIama版本3.0

本教程适用在Linux+Conda环境下LLaMA2模型的部署和试用。流畅阅读本教程需要对Linux系统及其命令行操作等相关知识具有一定了解;

且实践过程中需要科学上网的条件。

本教程主要分为两个部分,第一部分讲解了如何在系统中下载并安装Anaconda;第二部分讲解了Llama2模型的申请,下载,和demo运行过程。

Llama2作为Meta发布的开源大语言模型,可免费用于学术研究或商业用途。本章主要叙述如何在本地(或自己的远程服务器)Linux系统上申请,部署以及运行Llama2模型的demo。

本章主要参考 Llama2 in Github,有需要的同学也可自行取用。

申请Llama2许可

要想使用Llama2,首先需要向meta公司申请使用许可,否则你将无法下载到Llama2的模型权重。

申请网站(实测需要科学上网):ai.meta.com/resources/m

一段时间后,你将会收到一封邮件,马赛克部分以https://download.llamameta.net/*? 开头的一大串链接即为下面下载模型时需要验证的内容。

创建虚拟环境 & 安装依赖

在这一步中我们需要使用conda创建一个虚拟环境以运行Llama2模型。首先运行下列命令,即可创建一个名为llama, python版本为3.10的虚拟环境。这里建议安装的python版本为3.9及以上。

 bash conda create -n llama python=3.10 

Proceed ([y]/n)? 后输入y ,即可自动创建环境。等待创建完成后,我们可以使用下列命令查看当前拥有的环境,并进入到llama环境中去。

# 查看当前存在的环境
conda env list
# 激活目标虚拟环境(llama)
conda activate llama

执行成功后,命令行前部的(base)标识会变成目标环境的名字,即(llama) 。

接下来,在你的代码文件夹下,使用下列命令克隆Llama2的github仓库。

 bash git clone https://github.com/facebookresearch/llama.git 

运行命令后,我们将会看到文件夹内多了一个llama文件夹。这个文件夹内包含Llama2模型的定义文件,两个demo,以及用于下载权重的脚本等等。
随后,进入llama2文件夹,使用下方命令,安装Llama2运行所需要的依赖:

 # 常规安装命令
 pip install -e .
 # 国内环境可以使用清华源加速
 pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple

这里需要的时间比较漫长,网速不能跑满的国内同学也许可以试试第二行的清华源加速安装流程。完成此步后,我们基本拥有了运行Llama2的软件环境。

下载模型权重

这一步主要是通过我们刚才从github上克隆的llama文件中的”download.sh" 脚本下载我们需要的模型权重,目前Meta开放了7B,13B和70B这三个规模的模型,每个规模下又有原始版本和chat版本,chat版本应该是在RLHF阶段针对人类对话能力进行了对齐和强化。
下载模型权重的方法如下:进入到llama文件夹路径之后,运行下载脚本。

 bash bash download.sh 

随后脚本会要求验证URL,将刚刚邮件中的一大段链接复制进去。最后输入你要下载的模型(或者直接Enter下载全部模型)即可。

模型权重文件比较大,7B模型约12.5GB,13B模型需要24.2GB,下载需要一定的时间。

❗ 申请到Llama2下载链接后需要尽快完成下载,下载过程中可能会遇到一直403forbidden的报错,这个时候需要删掉llama文件夹(包括其中所有已下载的权重),重新克隆仓库并运行脚本。详情可以参见 Llama2 in Github

运行模型demo

完成上述步骤后,我们即可简单运行Llama2模型了。llama文件中提供了两个demo以供运行。一个是基于原版模型的句子补全任务 example_text_completion.py,一个是基于chat模型的对话任务example_chat_completion.py
以7B模型为例,两个任务运行的脚本见下:

 # 句子补全
 torchrun --nproc_per_node 1 example_text_completion.py \     --ckpt_dir llama-2-7b/ \     --tokenizer_path tokenizer.model \     --max_seq_len 128 --max_batch_size 4
 # 对话生成
 torchrun --nproc_per_node 1 example_chat_completion.py \     --ckpt_dir llama-2-7b-chat/ \     --tokenizer_path tokenizer.model \     --max_seq_len 512 --max_batch_size 4

简单解释一下命令含义:

    • torchrun是一个PyTorch提供的用于分布式训练的命令行工具;
    • --nproc_per_node 1:这个选项指定在每个节点上使用1个GPU。意味着每个训练节点(可能是单个GPU或多个GPU)只使用一个GPU;
    • --ckpt_dir llama-2-7b/--tokenizer_path tokenizer.model主要指定使用的模型和tokenizer的路径。这个可以在对应.py文件中写死入参避免重复指定。

代码文件中已经明确了文本补全和对话的输入,如果你想把自己的文本输入给模型,可以修改代码文件中对应的变量以达到此目的。
例如可以在example_text_completion.py 中修改prompts列表变量,列表中的每一个元素为一个待补全的句子。

同理关于具体的对话任务,我们也可以直接在example_chat_completion.py 中对dialogs这个列表进行改写,从而用我们想要输入的语句对模型进行测试。
列表中的每一个字典元素为一个对话,role表示身份,有'system','user''assistant'三个选项;content则表示对话的文本内容。如果只是一个简单句子的输入,直接在列表中加入一个role为user的字典即可。如果是多轮输入,则需要以u/a/u/a/u...的形式进行。role中三个选项具体含义和用法如下:

'system':可以理解为对系统的生成内容的要求,在喂给模型的时候会被处理成Prompt自动拼接在后续输入的对话文本的前部。例如可以在此要求系统使用指定的内容or指定的风格进行回答。 仅可在输入列表中的第一个元素指定,未指定system的时候系统会自行添加一个默认的prompt,内容如下:

"""You are a helpful, respectful and honest assistant. Always answer as helpfully as possible, while being safe. Your answers should not include any harmful, unethical, racist, sexist, toxic, dangerous, or illegal content. Please ensure that your responses are socially unbiased and positive in nature.
 If a question does not make any sense, or is not factually coherent, explain why instead of answering something not correct. If you don't know the answer to a question, please don't share false information.""" 

'user':用户的输入文本。
'assistant':系统的回答文本,仅在构建多轮对话的时候使用。


欢迎投稿 职场/创业方向. 邮箱wangfzcom(AT)163.com:王夫子社区 » Facebook Meta ai大模型LIama 2.0和3.0本地部署教程