两步构建本地GPT
从chatgpt掀起的ai浪潮真实发展迅猛,从去年年底ChatGpt 3.5发布时候的万人空巷,到现在随便找个机器就能像模像样的跑一个mini版出来。真是令人感叹。
背景
大模型是指具有大量参数的深度学习或机器学习模型,这些参数可以通过训练过程自动调整以捕获输入数据中的复杂关系。这类模型通常具有较深的网络结构和较多的神经元,以增加模型的表示能力和学习能力。大模型在诸如自然语言处理、计算机视觉和语音识别等领域取得了显著的成果。 大模型使用了许多高级技术,主要包括以下几个方面:
- 深度神经网络(Deep Neural Networks,DNNs)
- 卷积神经网络(Convolutional Neural Networks,CNNs)
- 循环神经网络(Recurrent Neural Networks,RNNs)和长短时记忆网络(Long Short-Term Memory,LSTM)
- Transformer 架构
- 预训练与微调(Pretraining and Fine-tuning)
- 分布式训练(Distributed Training)和混合精度训练(Mixed Precision Training)
LLaMA是由Meta AI发布的大语言系列模型,完整的名字是Large Language Model Meta AI。Llama这个单词本身是指美洲大羊驼,所以社区也将这个系列的模型昵称为羊驼系模型。LLaMA按照参数量的大小分为四个型号:LLaMA-7B、LLaMA-13B、LLaMA-30B与LLaMA-65B。这里的B是billion的缩写,指代模型的参数规模。故最小的模型7B包含70亿个参数,而最大的一款65B则包含650亿个参数。大语言模型训练过程大致可以分为四个阶段,其第一个阶段预训练所耗费的资源几乎占据了整个过程的99%——数千个GPU算力堆积在这里。这种规模的资源消耗远远超过普通人甚至是大部分公司的供应能力。而LLaMA的开源实际上为开源社区解决了参与的“门槛”问题。
获取中文模型
# 获取模型数据,此处需要科学上网。
git lfs install
git clone https://huggingface.co/LinkSoul/Chinese-Llama-2-7b-4bit
转化模型
# 拉取镜像
docker pull soulteary/llama2:converter
# 运行容器,将保持有大模型向量数据的文件夹映射到容器内部
docker run --ulimit memlock=-1 --ulimit stack=67108864 --rm -it -v `pwd`/Chinese-Llama-2-7b-4bit:/app/LinkSoul -v `pwd`/soulteary:/app/soulteary soulteary/llama2:converter bash
#使用镜像中的llama.cpp程序,将模型转化为CPU运算类型
python3 convert.py /app/LinkSoul/ --outfile /app/soulteary/Chinese-Llama-2-7b-ggml.bin
# 由于生成的模型有13GB,所以需要进一步精简模型,优化完成之后大约有3.6GB
./quantize /app/soulteary/Chinese-Llama-2-7b-ggml.bin /app/soulteary/Chinese-Llama-2-7b-ggml-q4.bin q4_0
部署
运行
# 拉取运行时环境
docker pull soulteary/llama2:runtime
# 运行镜像
docker run --ulimit memlock=-1 --ulimit stack=67108864 --rm -it -v `pwd`/soulteary:/app/soulteary soulteary/llama2:runtime bash
# 按照预设提示运行
./main -m /app/soulteary/Chinese-Llama-2-7b-ggml-q4.bin -n 256 --repeat_penalty 1.0 --color -i -r "User:" -f prompts/chat-with-bob.txt
范例
- 执行范例
- 资源占用
参考
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.