在本章节,我们将为您介绍D-Robotics-LLM的进阶开发使用流程。
此流程适用场景如下:
已对模型进行微调(finetune),且需重新量化的场景。
简单的单轮对话。
在端侧统计模型的PPL数值。
针对以上几种场景,这里我们还是以InternLM2-1.8B模型为例,为您进行使用说明。
请确保已按照 环境部署 章节正确完成开发机及开发板的环境准备。
下载我们提供的D-Robotics_LLM_{version}.tar.gz部署包并解压。
当前仅支持InternLM2-1.8B模型。
在下载模型前,请确保您已了解模型的使用许可、依赖环境等必要信息,以保证模型后续能正常使用。
您可以通过Hugging Face平台获取InternLM2系列的模型,以下为模型的下载链接:
D-Robotics-LLM为您提供了使用命令行量化编译生成板端模型的功能,此时我们以InternLM2-1.8B模型为例进行说明,参考命令如下:
关于oellm_build工具的详细使用方法及注意事项,请参考 oellm_build工具 章节。
若您通过resolve_model.txt提供的链接来获取我们编译好的hbm模型,则可跳过此模型量化步骤。
resolve_model.txt文件中提供的InternLM2模型,以chunk_size配置为256编译生成,且cache_len参数使用1024。
在D-Robotics_LLM_{version}/oellm_runtime/example目录中,我们在各子目录提前准备好了编译后的可执行文件,可以直接在板端运行。您也可以执行不同的编译脚本,自行生成所需文件,参考命令如下:
接下来在板端创建工作目录,参考命令如下:
在上板之前,您需要确保已经准备如下内容:
可运行的开发板,用于实际执行板端程序运行。
一个可上板运行的模型(*.hbm),即 模型量化 的产出物。
可执行文件(oellm_run和oellm_ppl文件)。
板端程序依赖库,为了降低部署成本,您可以直接使用D-Robotics-LLM包内D-Robotics_LLM_{version}/oellm_runtime/set_performance_mode.sh、
D-Robotics_LLM_{version}/oellm_runtime/lib文件夹、D-Robotics_LLM_{version}/oellm_runtime/config文件夹和D-Robotics_LLM_{version}/oellm_runtime/example文件夹中的内容。
准备好之后,我们将模型文件(*.hbm)、可执行文件及依赖库整合到一起,参考目录结构如下:
将开发机中整合的文件夹拷贝至此板端目录下,参考命令如下:
最后,在/home/root/llm/D-Robotics_LLM_{version}/oellm_runtime路径下,对LD_LIBRARY_PATH进行配置,参考命令如下:
板端运行参考指令如下:
其中,运行参数如下:
| 参数 | 参数说明 | 是否可选 |
|---|---|---|
-h, --help | 显示帮助信息。 | / |
--hbm_path | 用于指定量化后的模型文件(*.hbm)路径。 | 必填 |
--tokenizer_dir | 用于指定分词器配置路径。 | 必填 |
--model_type | 用于指定运行的模型类型,当前InternLM模型类型为4。 | 必填 |
板端统计模型的PPL数值参考指令如下:
程序的输入参数如下:
| 参数 | 参数说明 | 是否可选 |
|---|---|---|
-h, --help | 显示帮助信息。 | / |
-c, --config | 用于指定json配置文件路径。 | 必填 |
json配置文件示例如下:
json配置文件参数说明如下:
| 参数 | 参数说明 | 是否可选 |
|---|---|---|
hbm_path | 用于指定量化后的模型文件(*.hbm)路径。 | 必填 |
tokenizer_dir | 用于指定分词器配置路径。 | 必填 |
model_type | 用于指定运行的模型类型,当前InternLM2模型类型为4。 | 必填 |
ppl_testcase | 用于指定测试文件路径,当前仅支持bin格式。 | 必填 |
max_length | 用于指定每次送入模型的序列长度。 | 必填 |
stride | 用于指定测试步长。 | 必填 |
bpu_core | 用于指定使用的BPU核。默认值为-1,任意核。 | 可选 |
load_ckpt | 是否读取上次测试中断后的进度信息继续测试,默认值为false。 | 可选 |
text_data_num | 用于指定截断文本到特定长度再测试,若text_data_num <= 0,则不截断,默认值为0。 | 可选 |
简单对话测试参考如下:
PPL评估完成后,会在同目录生成{ppl_testcase}.json文件,其中Perplexity所对应的数值,即为最终的PPL测试结果。参考如下:
PPL支持断点续测,程序运行时会在执行目录生成ppl_ckpt.json文件,当load_ckpt为true时会读取该文件,从中断处继续测试。
PPL程序执行结束后,会在bin测试文件所在目录生成json文件,包含本次测试的关键参数和PPL计算结果。
ppl_testcase参数设定的bin文件可从parquet转换得到,提供convert_parquet_to_bin.py示例参考代码如下: