玩转树莓派4B-部署LLM大模型-1
实验环境
- Raspberry Pi4 8G
- Raspiois_arm64
- llama.cpp
- qwen2-0_5b-instruct-q5_k_m.gguf
- modelscope
前言
这几年人工智能很火,事实上,以1956年达特茅斯会议为节点开始,到现在人工智能经历了三次主要的浪潮,现在正是第三次浪潮。杰弗里·埃弗里斯特·辛顿(Geoffrey Everest Hinton)在2006年发表的一篇论文《A fast learning algorithm for deep belief nets》,标志着机器学习里的一个重要分支深度学习的出现,深度学习简单来说就是借鉴人脑的神经网络,搭建一个神经网络模型,具有输入层、隐藏层和一个输出层,让模型去学习人类输入进去的数据,得到经验。
而真正引爆第三次人工智能浪潮的是2012年由辛顿(Hinton)和他的学生伊利亚・苏茨克沃(Ilya Sutskever)以及亚历克斯・克里切夫斯基(Alex Krizhevsky)设计出的AlexNet深度神经网络,第一次使用了nvidia的显卡进行矩阵的并行计算,表现出了GPU在深度神经网络训练上表现出的惊人能力。由此大家似乎看到了我们一直想要实现的可以自主学习的人工智能有了实现的可能。时至今日,在人工智能(Artificial Intelligence)这个领域已经产出了诸多的路线和理论。
近两年比较火的便是LLM大语言模型,其属于NLP自然语言处理这个子领域,2017年由Google的研究人员发表了一篇论文,提出了一种名叫Transformer的序列建模神经网络架构,后续基于transformer的相关研究,则催生了两个最著名的Transformer模型类别:生成预训练Transformer——GPT和基于Transformer的双向编码器表示——BERT。后来在2022年年底由Openai发布的ChatGPT则引发了人们惊叹生成式AI的不可思议,到今天已经一年半过去,在这段时间里催生了诸多新的研究,可以乐观的想,是时候了,就趁现在。
随着大模型不断的变小,人们希望大模型能够就在自己的手机里运行。下面我将演示在树莓派搭建一个qwen2 0.5b的模型推理服务,可以像调用OpenAI的服务一样使用。
环境准备
1.安装python库
pip3 install modelscope==1.17.1
pip3 install openai==1.30.5
2.下载qwen2模型
由于huggingface在国内访问比较麻烦,可以考虑在modelscope上下载,这是由阿里云搭建的跟huggingface一样的平台。
wget https://www.modelscope.cn/models/qwen/Qwen2-0.5B-Instruct-GGUF/resolve/master/qwen2-0_5b-instruct-q5_k_m.gguf
也可以使用modelscope来下载
#模型下载
from modelscope import model_file_download
model_dir = model_file_download(model_id='qwen/Qwen2-0.5B-Instruct-GGUF',
file_path='qwen2-0_5b-instruct-q5_k_m.gguf',
revision='master',
cache_dir='/root/autodl-tmp')
3.下载llama.cpp
3.1下载代码仓库
git clone https://github.com/ggerganov/llama.cpp
3.2 编译
这里的编译是CPU编译,对于有CUDA等GPU推理的环境可以针对相应的硬件进行编译。
cd llama.cpp
make
也可以使用cmake编译
cmake -B build
cmake --build build --config Release
使用make编译后的文件就在当前目录下,使用cmake编译后的文件在build/bin
目录下
编译成功后可看见
使用
1.使用llama.cpp实现模型推理对话
此处使用cmake编译,需要进入build/bin目录,如果使用make编译,注意相对路径的问题
./llama-cli -m /home/pi/qwen2-0_5b-instruct-q5_k_m.gguf -n 512 -co -i -if -f ../../prompts/chat-with-qwen.txt --in-prefix "<|im_start|>user\n" --in-suffix "<|im_end|>\n<|im_start|>assistant\n" -ngl 24 -fa
2.使用llama.cpp实现模型推理服务
./llama-server -m /home/pi/qwen2-0_5b-instruct-q5_k_m.gguf -n 1024 --host 0.0.0.0 --port 8000
3.使用openai调用推理服务
import openai
print(openai.__version__)
# '1.30.1'
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1",
api_key="sk-no-key-required")
messages=[
{"role": "system", "content": "你是一个乐于助人的助手"},
{"role": "user", "content": "太阳系有几大行星,分别是哪几个"}
]
completion = client.chat.completions.create(model="gpt-3.5.turbo", messages=messages)
print(completion.choices[0].message)
参考资料
- 人工智能简史(第2版) 尼克
- llama.cpp构建:https://github.com/ggerganov/llama.cpp/blob/master/docs/build.md
- 入门必读,写给初学者的人工智能简史:https://www.ithome.com/0/784/577.htm
- 神经网络之父Hinton介绍及其论文介绍:https://blog.csdn.net/zephyr_wang/article/details/120392050