共计 4248 个字符,预计需要花费 11 分钟才能阅读完成。

LLama 2干货部署教程+模型分发

机器学习老萌新
16 人赞同了该文章
最近,Meta家的LLama发布了第二个版本,虽然对中文能力不怎么样,但总体表现仍然相当出色。发布当天,我就迫不及待地下载来试用,与之前版本LLama相比,LLama2在各方面都有显著提升,实测编程能力上提升还是非常大的。今天,我就和大家分享一下如何部署LLama2模型,以及如何将模型共享给朋友和同事使用。
一、模型下载登记
首先,我们要去这个网址https://ai.meta.com/resources/models-and-libraries/llama-downloads/ 留下一些基本信息。需要填写的信息其实很简单,名字、邮箱、国家、公司。基本如实填写就可以了,审核流程看起来不严,不过鉴于某些原因,建议国家最好还是选择美国。
登记完毕后,可能需要等一会儿。我自己当时大概等了一个小时才收到了Meta发来的邮件,邮件长这样:

邮件里会附带一个key,就是邮件里涂黑的那部分,它是一个网址。你不需要去访问这个网址,但是一定要记得把这个key复制下来,因为我们后面会用到它。
二、下载LLama 2
到目前为止,LLama2已经推出了7B,13B,70B,7B-chat,13B-chat,70B-chat这6种模型,针对聊天的功能推出了chat版本。值得一提的是,chat版本是用了RLHF进行finetune的,这在当前的大语言模型中可以说是非常前沿了。另外还有个30b的版本,稍后也会很快推出了。
那我们接下来就通过官方的脚本下载模型吧。首先,我们要访问LLama的官方github repo https://github.com/facebookresearch/llama,并clone这个项目库。clone完后,在项目库中,找到并运行download.sh脚本,然后按照提示输入你之前复制的key,选择你需要的模型,就可以开始下载了。下载服务器是Meta自家的,速度挺快的,我当时是满速下载完成的。
毕竟满速下载,我下了所有的模型,下面是我下载完后的文件列表。其中以llama-2开头的文件夹就是刚刚下载的模型,大家可以根据自己的需求选择一个使用。

这是官方对硬件的要求:

可以看到,其中A10G有24G显存,也就是说我用的4090显卡只能运行7b的模型。不过在我测试7b模型的时候,发现显存占用在13G左右,等GPTQ支持LLama2后,运行13b模型应该没什么问题。
三、转换模型
官方的博客指南为我们提供了transformers和oobabooga家的text-generation-webui两种部署方式,像我们这种需要图形界面的,那就用text-generation-webui。另外,我们刚刚下载的模型是pth格式,一般都是pytorch生成的,但是text-generation-webui默认使用的是huggingface格式的模型,所以我们需要进行一次转换操作。
截止到我写这篇文章的时候,transformer库还没有提供对应转换llama2的脚本,但肯定很快就会有更新的。经过测试发现,我们也是可以先借用一下第一代llama的转换脚本进行转换,只是需要稍微欺骗一下脚本。
我们需要先将https://github.com/huggingface/transformers这个repo克隆到本地,脚本文件的路径为:src/transformers/models/llama/convert_llama_weights_to_hf.py。
转换之前,我们需要进行一个操作,以便模型能按照脚本预设的目录进行运行。对于曾使用过上一代模型的读者可能已经了解,llama提供了7b、13b、30b、65b四种不同规模的模型,因此要使用第一代LLama的转换脚本,我们需要将下载的模型名称改为这些名称,以便脚本能正确识别。例如,我使用了7b-chat模型,那么我就需要将7b-chat文件夹改名为7B。总的来说就是模型是7b-chat或7b则需要改名7B ,13b-chat或13b则需要改名13B,但是70b规模的不知道参数能不能对上65b的,这个有能力的同学可以试一下。

重命名完成后,就可以开始运行convert_llama_weights_to_hf.py脚本进行模型转换,具体的参数如下:
python src/transformers/models/llama/convert_llama_weights_to_hf.py \
--input_dir [llama repo所在路径]\
--model_size [7B,13B] \
--output_dir [huggingface格式模型输出文件夹]
转换完成后,你可以在output_dir也就是huggingface格式模型输出文件夹中找到以下文件:
config.json
pytorch_model-00001-of-00002.bin
pytorch_model-00002-of-00002.bin
tokenizer_config.json
generation_config.json
tokenizer.model
special_tokens_map.json
pytorch_model.bin.index.json
有了这些文件,我们就可以进行下一步了。
四、搭建text-generation-webui
text-generation-webui是github上的一个开源项目,也是目前运行开源模型最广泛使用的软件之一。如果你之前用过第一代LLama,应该对这个项目比较熟悉。

text-generation-webui的安装方式相当简单,同样需要从github上克隆项目:https://github.com/oobabooga/text-generation-webui。克隆完成后,我们把刚才转换好的huggingface格式的模型文件夹整个放入models中,目录结构如下:

我们将刚才生成好huggingface格式的模型文件夹整个放入models中,文件结构如下图:

其中llama-2-7b-chat是我在上一步output_dir中指定的huggingface输出文件夹。
如果这一步做完了,模型部署这块就大功告成啦。现在我们运行text-generation-webui就可以和llama2模型对话了,具体的命令如下:
python server.py --model [output_dir中指定的huggingface输出文件夹名字] --api --listen
五、分发模型
现在,你的LLama2模型已经搭建好了,怎么样把它分享给你的朋友或同事使用呢?我们用YourChat来完成这个工作。YourChat是一个聊天客户端,它支持text_generation_webui的API,适配了Android、iOS、Windows和MacOS,以下我们以Windows版本为例,当然其他平台也大同小异。
下载地址:https://yourchat.app/download
在上一步,我们在启动text_generation_webui的时候添加了一个–api参数,这就让text_generation_webui支持了API调用。如果你想要使用YourChat,那这个API功能就必须要打开。
首先,让我们把刚刚搭建的text_generation_webui添加到YourChat的服务里面。如果是第一次使用YourChat,它会弹出一个新手教程。如果text-generation-webui参数没有动过,那就按照教程的指引,填入服务的IP地址就可以了。

如果之前已经下载过YourChat,那就在YourChat的”服务”界面,点击右下角的”+”按钮,添加一个新的服务。在”名称”栏中,输入你的服务名称,比如模型名字”llama-2-7b-chat”。在”Host”栏中,填写你的模型服务器的地址,例如”192.168.2.2″。

然后点击右上角的保存按钮,你的Llama2模型就成功地被添加到了YourChat中,你现在可以开始和Llama进行聊天了。

不过看起来,Llama2并不清楚它就是我们所说的”llama”。
使用YourChat的一个大优势是能方便地分享模型。YourChat支持订阅链接功能,也就是说,你把模型设置好,使用YourChat的订阅链接功能生成一个链接,那你的同事和朋友就可以用YourChat无缝同步你的设置,然后就可以和你的模型进行对话了。加上Yourchat也支持OpenAI的API,这个种类似一键分发的功能确实是非常方便
具体的操作步骤是:进入”设置”->”订阅链接”界面,点击”新建订阅链接”。然后在新弹出的页面中输入订阅的名称,比如”llama”,并在服务列表中勾选你刚刚设置的LLama2服务。点击”发布服务到我的链接”后,你就得到了一个订阅链接,链接中包含一个8位数的密码。你只需要把这个链接分享给你的朋友们,他们就可以通过这个链接订阅并使用你的Llama2服务了。

你的朋友们在收到你的订阅链接后,下载个Yourchat,用浏览器访问下链接,通过链接打开YourChat,就可以访问你的LLama2了

六、结语
至此,我们就完成了LLama2模型的搭建和分发。虽然目前我们只在局域网中进行了分发,但如果你需要在公网中发布,还可以配合使用text_gernation_webui的–public-api功能。最后,按照惯例,让LLama 2给RLHF写首诗吧:
The RLHF algorithm for language modeling,
Is like a black box wearing a hat,
The input is the text, and it’s fed to the LLM,
It takes the text and then it’s read,
The output is the probability of each word,
And it’s used to predict what comes next,
This process repeats until the end of the text,
Then the final probability distribution is produced,
Which can be used to generate new sentences with the LLM.