之前觉得大模型在本地运行是个不可能的事情,我甚至没有一块 GPU。但是尝试了一下 llama.cpp 发现几分钟就把 Meta 最新开源的 Llama 2 在 CPU 上运行起来了,速度和质量都还可以接受,很多想法突然就变得可行了。记录一下搭建的过程,希望对感兴趣的人有帮助。
需要的配置
尽管不需要 GPU 和加速卡,但是大模型对磁盘和内存还是有需求的,我运行的是 Llama 2 7B 的模型,经过了 GGML 处理,选择了 int8 的精度。这个模型跑起推理来大概需要 7G 的磁盘空间,运行起来也需要 7G 左右的内存,长期运行的话内存有 10G 会比较保险。CPU 的话 1 核也能跑,但给到 6 核会比较流畅。
搭建步骤
下载模型:
1 | wget https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGML/resolve/main/llama-2-7b-chat.ggmlv3.q8_0.bin |
这是一个处理过的模型,减小了体积和精度,专门为端侧运行做了优化,也不需要申请 Meta 的授权直接就能下载。
下载并安装 llama.cpp:
1 | git clone https://github.com/ggerganov/llama.cpp.git |
这是一个高性能的 Llama 推理工具集,可以方便的做 chat,api 等等服务。
移动模型文件到对应目录:
1 | mv ../llama-2-7b-chat.ggmlv3.q8_0.bin models/ |
好了现在你就可以在本地运行一个 chat 了:
1 | ./main -m ./models/llama-2-7b-chat.ggmlv3.q8_0.bin -c 512 -b |
更多配置
在 examples 目录下还可以看到 llama.cpp 的其他用法,比如提供 API 服务,提供 embedding 和 fine-tune,甚至还有一个兼容 OpenAI API 的转换器。
如果你的机器有 GPU 或者用的是 M 系列芯片的 Mac 那么可以通过 make 参数提高推理的性能。
如果你的机器再厉害一些可以考虑去 huggingface 上去下载更大参数量的模型。
为什么要本地运行大模型
其实我手头 OpenAI 的 GPT3/GPT3,Google Bard,Claude 2 的 API 使用权都有,那为啥还要费心思在本地用 CPU 跑质量并不如他们的大模型呢?
第一个原因是穷,和我想做的事情相关。我想用大模型做代码分析和信息摘要,一个项目可能有上万个 commit 跑一遍就破产了。
第二个原因是穷,买不起 GPU 和 M 系列的 Mac,只能找穷人的方法。
第三个原因是我觉得未来端侧的大模型会更实用,也更能贴近个人的场景进行垂直方向的定制化,想借着这个机会看看这个领域到啥地步了。