File size: 4,330 Bytes
7c071a8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
![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
```
|