本项目实现BM1684X部署语言大模型Wizardcoder-15B。通过TPU-MLIR编译器将模型转换成bmodel,并采用c++代码将其部署到BM1684X的PCIE环境,或者SoC环境。
- 支持C++20标准的gcc或clang编译器
- 如果不使用
demo/libsophon_pcie
的libsophon或者需要特定版本的libsophon,需要在下面编译时指定LIBSOPHON_DIR
) - 转换好的Wizardcoder-15B.bmodel文件,直接
GIT_LFS_SKIP_SMUDGE=1 git clone git clone https://huggingface.co/WizardLM/WizardCoder-15B-V1.0 && cp *.bmodel WizardCoder-15B-V1.0
将它们放在一起。demo会使用原仓库下的配置和tokenizer配置 - 如果需要在
python
下直接推理或者evalatuion,需要python
,版本不低于3.8其他和依赖libpython3-dev, python3-numpy, swig
等,一个参考的编译环境为:d
cd build
cmake .. -GNinja -DLIBSOPHON_DIR=...
ninja
cd build
cmake .. -GNinja -DBUILD_PYTHON=ON
ninja
完成上文的编译过程后,生成build/demo/bin/wizardcodercc
可执行文件,它可以完成加载bmodel并在BM1684X
设备上进行推理。
此时直接使用demo/bin/wizardcodercc /path/to/.bmodel
即可在单颗芯片上完成推理
完成上文的编译过程后,会在/build/demo/python
下生成相关的python库,此时可以在Python中进行wizardcoder-15B的推理,参考示例:
import pybmwizardcoder
import numpy as np
model_path = path/to/wizardcoder.bmodel
model = pybmwizardcoder.bmwizardcoder_create()
devs = np.array([0]).astype(np.int32)
pybmwizardcoder.bmwizardcoder_init(model, model_dir=model_path, devids=devs)
prompt = "Write a Rust code to find SCC."
x = pybmwizardcoder.bmwizardcoder_stream_complete(model, prompt, 20)
print(f'Result: {x}')