|
![image](./assets/sophgo_chip.png) |
|
|
|
# Llama3 |
|
|
|
本项目实现BM1684X部署语言大模型[Llama3-8B-instruct](https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct)。通过[TPU-MLIR](https://github.com/sophgo/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提供的模型权重](https://modelscope.cn/models/LLM-Research/Meta-Llama-3-8B-Instruct/summary)进行下载,或者通过Huggingface申请Meta License进行下载。 |
|
|
|
|
|
### 步骤二:下载docker |
|
|
|
下载docker,启动容器,如下: |
|
|
|
``` shell |
|
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代码并编译 |
|
|
|
``` shell |
|
git clone git@github.com:sophgo/tpu-mlir.git |
|
cd tpu-mlir |
|
source ./envsetup.sh |
|
./build.sh |
|
``` |
|
* PS:重新进入docker环境并且需要编译模型时,必须在此路径下执行上述`source ./envsetup.sh` 和 `./build.sh`才能完成后续模型编译。 |
|
|
|
### 步骤四:对齐模型环境 |
|
|
|
``` shell |
|
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文件 |
|
|
|
``` shell |
|
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文件 |
|
|
|
生成单芯模型 |
|
|
|
``` shell |
|
./compile.sh --mode int8 --name llama3-8b --seq_length 512 # same as int4 |
|
``` |
|
|
|
生成双芯模型 |
|
|
|
``` shell |
|
./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版本相同): |
|
|
|
```shell |
|
cd python_demo |
|
mkdir build |
|
cd build |
|
cmake .. |
|
make |
|
cp *chat* .. |
|
``` |
|
|
|
## 模型推理(Python Demo版本) |
|
```shell |
|
cd ./python_demo |
|
python3 pipeline.py -m your_model_path -t ../token_config --devid your_devid |
|
``` |
|
其它可用参数可以通过`pipeline.py` 或者执行如下命令进行查看 |
|
```shell |
|
python3 pipeline.py --help |
|
``` |
|
|
|
## web demo |
|
``` |
|
python3 web_demo.py --model_path llama3-8b_int4_1dev.bmodel --tokenizer_path ../token_config/ --devid 0 |
|
``` |
|
|