
人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载ERNIE 1.0Enhanced Representation through kNowledge IntEgration是百度提出的知识增强语义理解模型通过对词、实体及实体关系的建模学习真实世界语义知识相较于 BERT 直接对先验语义知识单元建模具有更强的中文语义表示能力。本文基于 PaddleNLP 开源仓库中slm/model_zoo/ernie-1.0/finetune/deploy/目录下的官方部署示例完整讲解从模型微调、导出到 Python 推理部署的全流程重点剖析infer.py的实现原理与全部命令行参数。读完本文你将能够独立完成 ERNIE 1.0 中文情感分类模型在 CPU/GPU 上的推理部署并根据实际业务调整 batch size、序列长度、线程数等关键参数。1. 部署示例概览本部署示例位于 slm/model_zoo/ernie-1.0/finetune/deploy目录下提供infer.py脚本可快速完成在 CPU/GPU 上的中文情感分类任务 Python 推理。该示例以ChnSenticorp中文情感评论数据集上的文本分类任务为实战场景输入一段中文酒店评论或图书评论文本输出positive正面或negative负面的类别标签以及两类别的预测概率。推理脚本基于飞桨PaddlePaddle的Paddle Inference 预测引擎实现整个推理链路为加载已导出的推理模型静态图模型文件 权重文件使用AutoTokenizer对文本做分词、padding、truncation 预处理通过 Predictor 将输入喂给模型得到 logits对 logits 做 softmax 归一化取概率最大的类别作为预测结果。2. 前置条件先微调再导出推理模型infer.py需要的模型不是普通的动态图权重而是经过do_export 导出的推理模型。示例中模型是按照 ERNIE 1.0 训练文档 微调并导出得到的默认导出目录为model_zoo/ernie-1.0/finetune/tmp/chnsenticorp_v2/export。2.1 微调并导出模型在finetune目录下执行序列分类微调脚本 run_seq_cls.py同时开启模型导出功能cd slm/model_zoo/ernie-1.0/finetune # 开始 finetune 训练并导出模型 datasetchnsenticorp_v2 python run_seq_cls.py \ --do_train \ --do_eval \ --do_predict \ --do_export \ --model_name_or_path ernie-1.0-base-zh \ --dataset $dataset \ --output_dir ./tmp/$dataset \ --eval_steps 200 \ --save_steps 200 \ --metric_for_best_model eval_accuracy \ --load_best_model_at_end \ --save_total_limit 3与普通微调相比此命令新增了以下关键配置配置项作用--do_export开启模型导出功能训练完成后自动导出静态图推理模型--eval_steps/--save_steps评估和保存 checkpoint 的 step 间隔此处设为 200--metric_for_best_model eval_accuracy以验证集 accuracy 作为模型择优比较指标需保证save_steps是eval_steps的倍数--load_best_model_at_end训练结束时加载最优 checkpoint 再进行导出--save_total_limit 3最多保留 3 个 checkpoint超过限制时效果更差或更旧的 checkpoint 将被自动删除针对chnsenticorp_v2数据集仓库的 config.yml 中预设了超参数学习率0.00005、batch_size16、num_train_epochs8。脚本会通过ALL_DATASETS自动覆盖命令行同名参数见 utils.py 中 yaml 配置加载逻辑。2.2 模型导出与产出的文件导出过程由paddlenlp.transformers.export_model完成实现见 paddlenlp/transformers/export.py通过paddle.jit.to_static将动态图模型按input_spec转成静态图再paddle.jit.save保存同时把 tokenizer 配置一并写入导出目录。在 run_seq_cls.py 中模型输入规格被定义为两个[None, None]的 int64 张量input_ids分词后的 token 编号序列segment_idstoken_type_ids句对区分标记。导出完成后tmp/chnsenticorp_v2/export/目录下将包含model.jsonPIR 新执行模式或model.pdmodel旧模式推理模型结构文件model.pdiparams推理模型权重文件tokenizer 相关配置文件vocab 等。其中模型文件后缀由飞桨执行模式决定见 paddlenlp/utils/env.py 中的PADDLE_INFERENCE_MODEL_SUFFIX定义PIR 模式下为.json否则为.pdmodel权重文件后缀统一为.pdiparams。infer.py默认按前缀model拼装这两个文件名加载逻辑同样引用这两个常量。3. 快速开始CPU/GPU 推理进入deploy目录通过--model_dir指定导出的模型目录通过--device指定运行设备# CPU 推理 python infer.py --model_dir ../tmp/chnsenticorp_v2/export/ --device cpu # GPU 推理 python infer.py --model_dir ../tmp/chnsenticorp_v2/export/ --device gpu说明--model_dir的相对路径以deploy目录为基准即slm/model_zoo/ernie-1.0/finetune/deploy用户可按实际导出位置修改该路径。运行后脚本会自动加载chnsenticorp数据集的测试集load_dataset(chnsenticorp, splits[test])逐 batch 推理并打印每一条文本的预测结果输出形式如下...... Batch id: 1189, example id: 0, sentence: 作为五星级 酒店的硬件是差了点 装修很久 电视很小 只是位置很好 楼下是DFS 对面是海港城 但性价比不高, label: positive, negative prob: 0.0001, positive prob: 0.9999. Batch id: 1190, example id: 0, sentence: 最好别去,很差,看完很差想换酒店,他们竟跟我要服务费.也没待那房间2分种,居然解决了问题,可觉的下次不能去的,, label: negative, negative prob: 1.0000, positive prob: 0.0000. Batch id: 1191, example id: 0, sentence: 看了一半就看不下去了后半本犹豫几次都放下没有继续看的激情故事平淡的连个波折起伏都没有职场里那点事儿也学得太模糊没有具体描述而且杜拉拉就做一个行政而已是个人都会做的没有技术含量的工作 也能描写的这么有技术含量 真是为难作者了本来冲着畅销排行第一买来看看觉得总不至于大部分人都没品味吧结果证明这个残酷的事实一本让人如同嚼蜡的“畅销书”......, label: negative, negative prob: 0.9999, positive prob: 0.0001. Batch id: 1192, example id: 0, sentence: 酒店环境很好 就是有一点点偏 交通不是很便利 去哪都需要达车 关键是不好打 酒店应该想办法解决一下, label: positive, negative prob: 0.0003, positive prob: 0.9997. Batch id: 1193, example id: 0, sentence: 价格在这个地段属于适中, 附近有早餐店,小饭店, 比较方便,无早也无所, label: positive, negative prob: 0.1121, positive prob: 0.8879. Batch id: 1194, example id: 0, sentence: 酒店的位置不错附近都靠近购物中心和写字楼区。以前来大连一直都住但感觉比较陈旧了。住的期间酒店在进行装修翻新和升级房间设备。好是好希望到时房价别涨太多了。, label: positive, negative prob: 0.0000, positive prob: 1.0000. Batch id: 1195, example id: 0, sentence: 位置不很方便周围乱哄哄的卫生条件也不如其他如家的店。以后绝不会再住在这里。, label: negative, negative prob: 1.0000, positive prob: 0.0000. Batch id: 1196, example id: 0, sentence: 抱着很大兴趣买的买来粗粗一翻排版很不错姐姐还说快看吧如果好我也买一本。可是真的看了实在不怎么样。就是中文里夹英文单词说话才翻了2页实在不想勉强自己了。我想说的是练习英文单词靠这本书肯定没有效果其它好的方法比这强多了。, label: negative, negative prob: 1.0000, positive prob: 0.0000. Batch id: 1197, example id: 0, sentence: 东西不错不过有人不太喜欢镜面的我个人比较喜欢总之还算满意。, label: positive, negative prob: 0.0001, positive prob: 0.9999. Batch id: 1198, example id: 0, sentence: 房间不错,只是上网速度慢得无法忍受,打开一个网页要等半小时,连邮件都无法收。另前台工作人员服务态度是很好只是效率有得改善。, label: positive, negative prob: 0.0001, positive prob: 0.9999. ......每条输出包含四部分信息Batch id批次序号、example id批次内样本序号、sentence原始输入文本、label预测类别以及negative/positive prob两个类别的归一化概率。4. 参数说明infer.py支持的全部命令行参数如下表所示对应 infer.py 中parse_arguments的定义参数参数说明--model_dir必填。指定部署模型的目录目录下需包含model.pdmodel或model.json与model.pdiparams文件--batch_size输入的 batch size默认为 1--max_length最大序列长度默认为 128超过部分截断、不足部分 padding--device运行的设备可选范围[cpu, gpu]默认为cpu--device_id运行设备的 idGPU 卡号默认为 0--cpu_threads当使用 CPU 推理时指定推理的 CPU 线程数默认为 1--vocab_path可选tokenizer 词表目录路径为空时默认使用内置ernie-1.0分词器--model_prefix可选模型与权重文件前缀默认为model用于拼接model.pdmodel/model.pdiparams4.1 参数核心影响分析--batch_size控制每次喂给推理引擎的样本数。批量推理能充分利用矩阵运算的并行度吞吐更高默认为 1 时逐条推理延迟更稳定。脚本内部通过batchfy_text将测试集按该值切分为多个 batch。--max_length与微调时的max_seq_lengthconfig.yml 中chnsenticorp_v2默认 128保持一致效果最佳。过长文本会被截断过短文本会被 padding二者都会影响最终表征因此部署时的max_length建议与训练时对齐。--cpu_threads仅 CPU 推理生效对应Config.set_cpu_math_library_num_threads。线程数增加可提升 CPU 上矩阵运算的并行度但并非越大越好通常设置为机器物理核数附近。--device_idGPU 推理时指定使用的显卡编号对应Config.enable_use_gpu中的设备号参数。5. 源码深度解析infer.py 的推理链路下面逐段剖析 infer.py 的实现理解每一步背后做了什么。5.1 Predictor 初始化加载推理引擎与分词器class Predictor(object): def __init__(self, args): if args.vocab_path and os.path.isdir(args.vocab_path): self.tokenizer AutoTokenizer.from_pretrained(args.vocab_path) else: self.tokenizer AutoTokenizer.from_pretrained(ernie-1.0) model_file os.path.join(args.model_dir, args.model_prefix f{PADDLE_INFERENCE_MODEL_SUFFIX}) params_file os.path.join(args.model_dir, args.model_prefix f{PADDLE_INFERENCE_WEIGHTS_SUFFIX}) config inference.Config(model_file, params_file) if args.device gpu: config.enable_use_gpu(100, args.device_id) else: config.disable_gpu() config.set_cpu_math_library_num_threads(args.cpu_threads) config.switch_use_feed_fetch_ops(False) self.predictor inference.create_predictor(config) self.input_handles [self.predictor.get_input_handle(name) for name in self.predictor.get_input_names()] self.output_handle self.predictor.get_output_handle(self.predictor.get_output_names()[0])关键点分词器优先从--vocab_path指定的目录加载适用于导出自定义词表的模型未指定时回退到 PaddleNLP 内置的ernie-1.0分词器保证默认开箱即用。模型与权重文件通过--model_prefix默认model拼接推理模型文件与权重文件路径后缀常量来自paddlenlp.utils.env。推理配置GPU 模式下调用enable_use_gpu(100, device_id)100 为显存分配上限单位 MBCPU 模式下调用disable_gpu()并设置数学库线程数。feed/fetch 优化switch_use_feed_fetch_ops(False)关闭旧的 feed/fetch 算子走更高效的零拷贝推理接口。输入输出句柄按模型输入名拿到输入句柄此处为input_ids与token_type_ids取第一个输出作为 logits。5.2 预处理tokenizer 编码def preprocess(self, texts): encoded self.tokenizer( texts, max_lengthself.max_length, paddingTrue, truncationTrue, return_token_type_idsTrue ) input_ids np.array(encoded[input_ids], dtypeint64) token_type_ids np.array(encoded[token_type_ids], dtypeint64) return input_ids, token_type_idspaddingTrue同一 batch 内按最长序列补齐保证 batch 内张量形状一致truncationTrue超过max_length的文本截断return_token_type_idsTrue返回用于区分句对的 token type ids与导出模型的第二个输入对应结果转为int64的 numpy 数组作为推理引擎的 CPU 输入。5.3 推理与后处理def infer(self, input_ids, token_type_ids): self.input_handles[0].copy_from_cpu(input_ids) self.input_handles[1].copy_from_cpu(token_type_ids) self.predictor.run() return self.output_handle.copy_to_cpu() def postprocess(self, logits): probs softmax(logits, axis1) return {label: probs.argmax(axis1), confidence: probs}infer通过copy_from_cpu将输入拷贝到输入句柄predictor.run()执行一次前向再从输出句柄取回 CPU 结果postprocess使用scipy.special.softmax对 logits 按行axis1归一化为概率argmax(axis1)得到概率最大的类别索引类别索引到语义标签的映射在__main__中定义label_map {0: negative, 1: positive}因此该模型输出维度为 2负面 / 正面。5.4 主流程batch 推理与结果打印if __name__ __main__: args parse_arguments() predictor Predictor(args) test_ds load_dataset(chnsenticorp, splits[test]) texts_ds [d[text] for d in test_ds] label_map {0: negative, 1: positive} batch_texts batchfy_text(texts_ds, args.batch_size) for bs, texts in enumerate(batch_texts): outputs predictor.predict(texts) for i, sentence in enumerate(texts): label outputs[label][i] confidence outputs[confidence][i] print( fBatch id: {bs}, example id: {i}, sentence: {sentence}, flabel: {label_map[label]}, negative prob: {confidence[0]:.4f}, positive prob: {confidence[1]:.4f}. )主流程要点通过 PaddleNLP 数据集 APIload_dataset(chnsenticorp)自动加载内置的中文情感分类测试集无需手动准备数据batchfy_text按--batch_size将全部测试样本切分成批次每个批次调用predictor.predict内部串起 preprocess → infer → postprocess 三个步骤打印时保留 4 位小数概率label_map将 0/1 索引映射为negative/positive可读标签。6. 推理脚本的二次开发建议官方示例的infer.py是一个「数据集中自带测试集」的演示版本。将其改造成生产可用服务时可从以下几点入手建议在本地拷贝脚本后修改不改动仓库内容替换数据来源将load_dataset(chnsenticorp)替换为读取本地文件或接入消息队列逐条处理业务文本抽象 predict 接口保留Predictor类对外暴露predict(texts)便于接入 Flask/FastAPI 等 HTTP 服务调整--model_dir指向自己导出的任意 ERNIE 系列模型目录只要模型输入约定一致input_idstoken_type_ids即可复用CPU 服务化调优设置--cpu_threads为物理核心数并适当增大--batch_size换取吞吐多卡部署多路--device_id进程各自绑定一张 GPU配合负载均衡横向扩展。7. 总结本文完整覆盖了 ERNIE 1.0 中文情感分类模型从微调导出到 Python 推理部署的完整链路通过 run_seq_cls.py 配合--do_export导出静态图推理模型再由 infer.py 基于 Paddle Inference 完成 CPU/GPU 上的 batch 推理与概率输出。通过--device、--device_id、--batch_size、--max_length、--cpu_threads等参数可以灵活适配不同的硬件环境与业务吞吐需求深入阅读其源码实现也能为构建自定义的 ERNIE 推理服务提供可直接复用的工程骨架。赞分享人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐PaddleNLP 10分钟搞定高精度中文情感分析ERNIE 预训练模型 Fine-tune 实战指南PaddleNLP 10分钟搞定高精度中文情感分析ERNIE 预训练模型 Fine tune 实战指南 导读 本文以 PaddleNLP 官方快速入门文档为主人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPPaddleNLP SKEP 情感分析实战情感预训练模型的三类任务微调、Taskflow 预测与模型部署PaddleNLP SKEP 情感分析实战情感预训练模型的三类任务微调、Taskflow 预测与模型部署 情感分析旨在自动识别和提取文本中的倾向、立场、评价、人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPPaddleNLP 中 Mixtral-8x7B 的模型推理与部署实战指南PaddleNLP 中 Mixtral 8x7B 的模型推理与部署实战指南 本指南基于 PaddleNLP 开源仓库中 docs/zh/llm/docs/pre人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLP上一篇【免费下载】 矢量化神器vectorizer - 将PNG图像转换为SVG的利器下一篇第三章高级配置创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考