Llama3
本项目实现BM1684X部署语言大模型Llama3-8B-instruct。通过TPU-MLIR编译器将模型转换成bmodel,并采用c++代码将其部署到BM1684X的PCIE环境,或者SoC环境。
下文中默认是PCIE环境;如果是SoC环境,按提示操作即可。
目录说明
.
├── README.md
├── compile
│ ├── compile.sh #用来编译TPU模型的脚本
│ ├── export_onnx.py #用来导出onnx的脚本
│ └── files #用于替换原模型的文件
├── python_demo
│ ├── chat.cpp #主程序文件
│ └── pipeline.py #Llama3 python_demo的执行脚本
├── requirements.txt #环境配置所需安装的wheel包
├── run_demo.sh #自动测试脚本
└── token_config #分词器
├── special_tokens_map.json
├── tokenizer.json
└── tokenizer_config.json
自动化推理脚本
【阶段一】模型编译
注意点
- 模型编译必须要在docker内完成,无法在docker外操作
步骤一:模型下载
虽然Llama3模型允许商业开源,但是模型下载需要想Meta提交使用申请,因此测试模型时可以参考ModelScope提供的模型权重进行下载,或者通过Huggingface申请Meta License进行下载。
步骤二:下载docker
下载docker,启动容器,如下:
docker pull sophgo/tpuc_dev:latest
# myname1234 is just an example, you can set your own name
docker run --privileged --name myname1234 -v $PWD:/workspace -it sophgo/tpuc_dev:latest
步骤三:下载TPU-MLIR代码并编译
git clone git@github.com:sophgo/tpu-mlir.git
cd tpu-mlir
source ./envsetup.sh
./build.sh
- PS:重新进入docker环境并且需要编译模型时,必须在此路径下执行上述
source ./envsetup.sh
和./build.sh
才能完成后续模型编译。
步骤四:对齐模型环境
pip install -r requirements.txt
cp ./compile/files/Meta-Llama-3-8B-Instruct/modeling_llama.py /usr/local/lib/python3.10/dist-packages/transformers/models/llama/modeling_llama.py
同时将./compile/files/Meta-Llama-3-8B-Instruct/config.json
替换下载好的Llama-3-8B-Instruct
路径下的同名文件。
- PS:不一定是/usr/local/lib/python3.10/dist-packages/transformers/models/llama/modeling_llama.py这个路径,建议替换前先pip show transformers查看一下
步骤五:生成onnx文件
cd compile
python export_onnx.py --model_path your_model_path --seq_length 512
- PS1:your_model_path 指的是原模型下载后的地址, 如:"../../Meta-Llama-3-8B-Instruct"。
- PS2:默认导出sequence length为512的模型
步骤六:生成bmodel文件
生成单芯模型
./compile.sh --mode int8 --name llama3-8b --seq_length 512 # same as int4
生成双芯模型
./compile.sh --mode int8 --num_device 2 --name llama3-8b --seq_length 512 # same as int4
- PS1:生成bmodel耗时大概3小时以上,建议64G内存以及200G以上硬盘空间,不然很可能OOM或者no space left
- PS2:如果想要编译llama3-8b,则--name必须为llama3-8b
- PS3:目前给定的lib_pcie和lib_soc部分仅包含单芯的动态库,多芯部分会在后续更新
阶段二:可执行文件生成
编译程序(Python Demo版本)
执行如下编译,(PCIE版本与SoC版本相同):
cd python_demo
mkdir build
cd build
cmake ..
make
cp *chat* ..
模型推理(Python Demo版本)
cd ./python_demo
python3 pipeline.py -m your_model_path -t ../token_config --devid your_devid
其它可用参数可以通过pipeline.py
或者执行如下命令进行查看
python3 pipeline.py --help
web demo
python3 web_demo.py --model_path llama3-8b_int4_1dev.bmodel --tokenizer_path ../token_config/ --devid 0