跳到主要内容

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 -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 ../tokem_config

    -m: 指定模型路径

    -t: 指定 token_config 文件夹路径

    Gradio 模式

    python3 web_demo.py -m ./llama3-8b_int4_1dev_512.bmodel -t ../tokem_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 文件

    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,你是一个总是用中文海盗语回应的海盗聊天机器人'