## 模型和环境 ### 构建环境 ```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流式推理