Llama3 Chatbot-TPU
Llama3 ChatBot-TPU 是使 用 Sophon SDK 将 Meta 开源 Llama3 模型移植到 SG2300X 芯片系列产品上, 使其能利用本地 TPU 进行硬件加速推理,并使用 Gradio 设计成聊天机器人, 用户可以向其询问一些实际问题
Llama3 部署
-
克隆仓库
git clone https://github.com/zifeng-radxa/LLM-TPU.git
-
打开 Llama3 项目路径
cd LLM-TPU/models/Llama3/python_demo
-
本案例提供 Llama-3-8B-Instruct 4bit 量化模型 llama3-8b_int4_1dev_512.bmodel 与 C++ 预编译文件下载
用户可以参考 Llama3 模型转换自行转换不同量化方式的 Llama3 模型
用户可以参考 Llama3 cpython 文件编译 自行编译 cpython 接口绑定文件
# llama3-8b_int4_1dev_512.bmodel
wget https://github.com/radxa-edge/TPU-Edge-AI/releases/download/llama3/tar_downloader.sh
bash tar_downloader.sh
tar --strip-components=1 -xvf llama3-8b_int4_1dev_512.tar.gz -
配置环境
必须创建虚拟环境,否则可能会影响其他应用的正常运行, 虚拟环境使用请参考这里
python3 -m virtualenv .venv
source .venv/bin/activate -
安装依赖包
pip3 install --upgrade pip
pip3 install -r requirements.txt -
导入环境变量
请使用 ldd 命令检查 chat.cpython-38-aarch64-linux-gnu.so 链接的 libbmlib.so 的路径是否为
LLM-TPU/support/lib_soc/libbmlib.so
如
libbmlib.so
链接路径有误可运行下面的命令export LD_LIBRARY_PATH=LLM-TPU/support/lib_soc:$LD_LIBRARY_PATH
-
启动 Llama3
(可选) 修改 Llama3 输出语言或角色扮演, 请参考 修改 Llama3 背景信息
终端模式
python3 pipeline.py -m ./llama3-8b_int4_1dev_512.bmodel -t ../token_config
-m
: 指定模型路径-t
: 指定 token_config 文件夹路径Gradio 模式
python3 web_demo.py -m ./llama3-8b_int4_1dev_512.bmodel -t ../token_config
-m
: 指定模型路径-t
: 指定 token_config 文件夹路径 浏览器访问 Airbox ip 地址的 8003 端口
Llama3 模型转换
用户可以参考本文自行转换不同量化类型的 Llama3 模型到 bmodel
-
X86 工作站中准备环境
请参考 TPU-MLIR 安装 配置 TPU-MLIR 环境
克隆仓库
git clone https://github.com/zifeng-radxa/LLM-TPU.git
-
通过 Huggingface 填写申请表下载 Llama3 开源模型
-
在工作目录
LLM-TPU/models/Llama3
中创建虚拟环境虚拟环境使用请参考这里
python3 -m virtualenv .venv
source .venv/bin/activate
pip3 install --upgrade pip
pip3 install -r requirements.txt -
对齐模型环境
将
LLM-TPU/models/Llama3/compile/files/Meta-Llama-3-8B-Instruct/modeling_llama.py
复制到 transformers 库中, 注意此时 transformers 库应在 .venv 里cp ./compile/files/Meta-Llama-3-8B-Instruct/modeling_llama.py .venv/lib/python3.10/site-packages/transformers/models/llama/modeling_llama.py
同时将
./compile/files/Meta-Llama-3-8B-Instruct/config.json
替换下载好的 Llama-3-8B-Instruct 路径下的同名文件。 -
生成 onnx 文件
提示请使用 torch==1.12.0
cd compile
python export_onnx.py --model_path your_model_path --seq_length 512--model_path
: 是下载的 meta llama3 文件夹路径--seq_length
: 是固定导出的 sequence length, 根据需要可选 512, 1024,2048 等长度 -
生成 bmodel 文件
生成 bmodel 之前需要退出虚拟环境
deactivate
编译模型
./compile.sh --mode int4 --name llama3-8b --seq_length 512 # same as int8
--mode
:量化模式,可选 int4, int8--seq_length
: 序列长度,需和生成 onnx 文件时指定相同 seq_length--name
: 模型名称,此处必须为 llama3-8b生成 bmodel 耗时大概 2 小时以上,建议 64G 内存以及 200G 以上硬盘空间,不然很可能 OOM 或者 no space left
Llama3 cpython 文件编译
在 Airbox 中编译可执行文件, 预编译文件已经包含在 llama3-8b_int4_1dev_512.tar.gz 下载包中,如已下载无需编译
cd python_demo
mkdir build
cd build
cmake ..
make
cp *chat* ..
修改 Llama3 背景信息
用户可以通过修改 Llama3 初始化背景信息,将 Llama3 换成不同角色扮演或不同语言输出,默认是英文 AI 助手 You are Llama3, a helpful AI assistant.
用户修改 LLM-TPU/models/Llama3/python_demo/pipeline.py
中的 system_prompt
来初始化 Llama3
例如,将Llama3 换成中文输出可以是
self.system_prompt = '你是 Llama3,一个中文 AI 助手,你的回答都需要用中文回答'
将 Llama3 换成有趣的角色扮演
self.system_prompt = '你是 Llama3,你是一个总是用中文海盗语回应的海盗聊天机器人'