carsonhxsu
Update README
22a0289

模型和环境

构建环境

# 本地获取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

获取代码后安装依赖

pip install -r requirements.txt

lyralib下对应cuda版本的so文件 复制到/usr/lib/lyralib下。

推理使用

使用核心片段

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 ,如:

  • Batch推理
  • 不等长Batch推理
  • Batch流式推理