跳到主要内容

Qwen2 Chatbot-TPU

Qwen2 ChatBot-TPU 是使用 Sophon SDK 将 Alibaba 开源 Qwen2 模型移植到 SG2300X 芯片系列产品上, 使其能利用本地 TPU 进行硬件加速推理,并使用 Gradio 设计成聊天机器人, 用户可以向其询问一些实际问题

Qwen2 部署

  • 克隆仓库

    git clone https://github.com/zifeng-radxa/LLM-TPU.git
  • 打开 Qwen2 项目路径

    cd LLM-TPU/models/Qwen2/python_demo
  • 本案例提供 Qwen2-7B-Instruct 4bit 量化模型 qwen2-7b_int4_seq512_1dev.bmodel 与 C++ 预编译文件下载

    用户可以参考 Qwen2 模型转换 自行转换不同量化方式的 Qwen2 模型

    用户可以参考 Qwen2 cpython 文件编译 自行编译 cpython 接口绑定文件

    # qwen2-7b_int4_seq512_1dev.bmodel
    wget https://github.com/radxa-edge/TPU-Edge-AI/releases/download/qwen2/tar_downloader.sh
    bash tar_downloader.sh
    tar -xvf qwen2-7b_int4_seq512_1dev.tar.gz
  • 配置环境

    必须创建虚拟环境,否则可能会影响其他应用的正常运行, 虚拟环境使用请参考这里

    python3 -m virtualenv .venv
    source .venv/bin/activate
  • 安装依赖包

    pip3 install --upgrade pip
    pip3 install gradio transformers
  • 导入环境变量

    请使用 ldd 命令检查 chat.cpython-38-aarch64-linux-gnu.so 链接的 libbmlib.so 的路径是否为 LLM-TPU/support/lib_soc/libbmlib.so

    libbmlib.so 链接路径有误可运行下面的命令,请正确指定 LLM-TPU 路径

    export LD_LIBRARY_PATH=LLM-TPU/support/lib_soc:$LD_LIBRARY_PATH
  • 启动 Qwen2

    (可选) 修改 Qwen2 输出语言或角色扮演, 请参考 修改 Qwen2 背景信息

    终端模式

    python3 pipeline.py --model_path your_bmodel_path --tokenizer_path ../support/token_config/

    -m; --model_path: 指定模型路径

    -t; --tokenizer_path: 指定 token_config 文件夹路径, 默认为 ../support/token_config

    Gradio 模式

    python3 web_demo.py -m your_bmodel_path -t ../support/token_config/

    -m; --model_path: 指定模型路径

    -t; --tokenizer_path: 指定 token_config 文件夹路径, 默认为 ../support/token_config

    浏览器访问 Airbox ip 地址的 8003 端口

Qwen2 模型转换

用户可以参考本文自行转换不同量化类型的 Qwen2-7B-Instruct 模型到 bmodel

  • X86 工作站中准备环境

    请参考 TPU-MLIR 安装 配置 TPU-MLIR 环境

    克隆仓库

    git clone https://github.com/zifeng-radxa/LLM-TPU.git
  • 通过 Huggingface 下载 Qwen2 开源模型

    提示

    请确保已安装 git lfs

    git clone https://huggingface.co/Qwen/Qwen2-7B-Instruct
  • 在工作目录 LLM-TPU/models/Qwen2 中创建虚拟环境

    虚拟环境使用请参考这里

    python3 -m virtualenv .venv
    source .venv/bin/activate
    pip3 install --upgrade pip
    pip3 install transformers_stream_generator einops tiktoken accelerate torch==2.0.1+cpu torchvision==0.15.2 transformers==4.41.2
  • 对齐模型环境

    LLM-TPU/models/Qwen2/compile/files/Qwen2-7B-Instruct/modeling_llama.py 复制到 transformers 库中, 注意此时 transformers 库应在 .venv 里

    cp ./compile/files/Qwen2-7B-Instruct/modeling_llama.py .venv/lib/python3.10/site-packages/transformers/models/qwen2
  • 生成 onnx 文件

    cd compile
    python export_onnx.py --model_path your_model_path --seq_length 512

    --model_path: 是下载的 Qwen2 文件夹路径

    --seq_length: 是固定导出的 sequence length, 根据需要可选 512, 1024,2048 等长度

  • 生成 bmodel 文件

    生成 bmodel 之前需要退出虚拟环境

    deactivate

    编译模型

    ./compile.sh --mode int4 --name qwen2-7b --addr_mode io_alone --seq_length 512 # same as int8

    --mode:量化模式,可选 int4, int8

    --seq_length: 序列长度,需和生成 onnx 文件时指定相同 seq_length

    --name: 模型名称,此处必须为 qwen2-7b

    --addr_mode: 记录网络的地址分配模式,此处选择 io_alone 模式

    提示

    生成 bmodel 耗时大概 1 小时以上,建议 64G 内存以及 100G 以上硬盘空间,不然很可能 OOM 或者 no space left

Qwen2 cpython 文件编译

在 Airbox 中编译可执行文件, 预编译文件已经包含在 qwen2-7b_int4_seq512_1dev.tar.gz 下载包中,如已下载无需编译

cd python_demo
mkdir build
cd build && cmake .. && make && cp *cpython* .. && cd ..

修改 Qwen2 背景信息

用户可以通过修改 Qwen2 初始化背景信息,将 Qwen2 换成不同角色扮演或不同语言输出,默认是英文 AI 助手 You are a helpful assistant.

用户修改 LLM-TPU/models/Qwen2/python_demo/pipeline.py 中的 system_prompt 来初始化 Qwen2

例如,将 Qwen2 换成有趣的角色扮演

self.system_prompt = '你是 Qwen2,你是一个总是用中文海盗语回应的海盗聊天机器人'