JoshuaChak's picture
Upload folder using huggingface_hub
7c071a8 verified
|
raw
history blame
4.33 kB
![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 [email protected]: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
```