File size: 3,014 Bytes
8453337 22a0289 |
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 |
## 模型和环境
### 构建环境
```shell
# 本地获取ngc pytorch cuda12原生镜像
docker pull nvcr.io/nvidia/pytorch:23.02-py3
# 启动容器
docker run --gpus all -itd --rm --name lyrallms_cu12 nvcr.io/nvidia/pytorch:23.02-py3
docker exec -it lyrallms_cu12 bash
```
获取代码后安装依赖
```shell
pip install -r requirements.txt
```
将`lyralib`下对应cuda版本的[so文件](../../lyralib/sm80) 复制到`/usr/lib/lyralib`下。
## 推理使用
### 使用核心片段
```python
from lyra_llama import lyraLlama
model_path = 'XXX' # 包含转换后的模型参数,配置,tokenizer文件目录
data_type = 'fp16'
memopt_mode = 0 # 如需使用MEMOPT模式推理, memopt_mode=1
# 加载加速后的模型,C++ 底层已经掩盖,依赖加速编译的 /usr/lib/ftlib 下的 so 库,已经打在镜像中
# 模型加载需要花一些时间,因为现在 IO 参数是多个小文件,建议把下载的模型参数解压到本地磁盘
model = lyraLlama(model_path, data_type, memopt_mode)
# 输入, 若有多个输入,可batch 推理,prompts 支持列表,这里为模拟多个输入,直接复制 32 分,batchsize 达到32
prompts = '列出3个不同的机器学习算法,并说明它们的适用范围.'
prompts = [prompts,]*64
# 生成, 最大长度可自行调整,这里设置 150,模型遇到 end token 或者达到最大计算长度时会停止当前批次计算.
# 因为 LLaMA-ZIYA 词表是按字切分,导致存储和计算量非常大,若是长序列生成情况,请自行缩小 batch_size
output_texts = model.generate(prompts, output_length=150, do_sample=False, top_k=30, top_p=0.85, temperature=1.0, repetition_penalty=1.0)
# 输出查看, 虽然 输入字符串也是参与计算,用于评估模型吞吐量和计算速度。
# 这里为了显示应用方便, output_texts 中每个样本的输出已经去掉了输入字符串
print(output_texts)
# 输出示例
>>> Inputs: 列出3个不同的机器学习算法,并说明它们的适用范围.
>>> Outputs:
1. 线性回归(Linear Regression):适用于解决两个变量之间的关系问题,例如预测房价或销售额。它可以用于回归分析和回归聚类分析。
2. 决策树(Decision Tree):适用于解决分类和回归问题。它可以用于分类、回归、异常检测和聚类分析。
3. 神经网络(Neural Network):适用于解决分类、回归和聚类问题。它可以用于图像识别、语音识别
```
### demo 脚本
`examples/batch_demo.py` 中有类似上面的使用示例,做了简单的跑速测试,考虑大家对 token 的理解各有不同,我们这里直接按字符数来评估,不同 token 的理解可以自行根据生成结果字符数去观测。注意:在 `LLaMA-ZIYA` 中,tokenizer 对中文的切分,约等于一个字是一个 token.
更多测试脚本及用法详见参考 `examples` 下的 [README.md](./examples/README.md) ,如:
- Batch推理
- 不等长Batch推理
- Batch流式推理 |