
人工智能大模型微调模型推理服务【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址https://gitcode.com/gh_mirrors/pa/PaddleFormers点击查看免费下载导读本文以 PaddleFormers 仓库中的 ernie_tiny 模型文档 为核心结合其 module.py 源码实现系统讲解基于 PaddlePaddle/PaddleHub 的 ERNIE-Tiny 语义理解模型的完整使用链路环境安装、模型加载与预测 API、三类下游任务文本分类、序列标注、文本匹配的 Fine-tuning、Embedding 特征抽取以及基于 PaddleHub Serving 的在线服务化部署。读完本文你将能独立完成从hub 安装一个预训练模型到训练自己的分类器并对外提供 HTTP 预测服务的完整闭环。一、ERNIE-Tiny 模型概述1.1 模型基本信息模型名称ernie_tiny类别文本-语义模型网络ernie_tiny数据集百度自建数据集是否支持 Fine-tuning是模型大小346MB最新更新日期2021-02-26数据指标-ERNIEEnhanced Representation through kNowledge IntEgration是百度提出的基于知识增强的持续学习语义理解模型。其核心思路是把大数据预训练与多源丰富知识相结合通过持续学习技术不断吸收海量文本数据中词汇、结构、语义等方面的知识使模型效果持续进化。ERNIE-Tiny 是其中的轻量级版本在保持语义理解能力的同时减小了模型体积约 346MB并支持max_seq_len512的输入序列长度见 module.py 中 moduleinfo 的 summary 字段更适合在资源受限场景下进行微调与推理。1.2 在仓库中的实现位置本模块在仓库中的代码结构为modules/text/language_model/ernie_tiny/README.md模型使用文档本文主体modules/text/language_model/ernie_tiny/module.py模块核心实现定义了ErnieTiny(nn.Layer)类modules/text/language_model/ernie_tiny/init.py包初始化文件从源码看ErnieTiny类通过moduleinfo装饰器注册到 PaddleHub 模块系统中metaTransformerModule表明它继承 paddlehub/module/nlp_module.py 中TransformerModuleRunModuleTextServing的能力因此天然支持predict、get_embedding、Fine-tuning 训练步骤training_step/validation_step以及 Serving 服务化。模型底层基于 PaddleNLP 的预训练实现from paddlenlp.transformers.ernie.modeling import ErnieModel, ErnieForSequenceClassification, ErnieForTokenClassification from paddlenlp.transformers.ernie.tokenizer import ErnieTinyTokenizer对应地get_tokenizer静态方法返回的是ErnieTinyTokenizer.from_pretrained(pretrained_model_name_or_pathernie-tiny)这是 ERNIE-Tiny 专属的轻量化分词器。二、环境准备与模型安装2.1 环境依赖使用 ernie_tiny 模块前需要满足以下版本要求paddlepaddle 2.0.0动态图版本paddlehub 2.0.0PaddleHub 的完整安装指引见 安装文档若在安装或运行中遇到问题可分别参考 零基础 Windows 安装、零基础 Linux 安装、零基础 MacOS 安装。2.2 安装模型模块$ hub install ernie_tiny如果需要指定版本安装例如文档中 2.0.2 版本新增了文本匹配任务text-matching可以使用$ hub install ernie_tiny2.0.2hub install会从 PaddleHub 模型仓库拉取该模块的代码与预训练权重并注册到本地环境之后即可在 Python 中以hub.Module(nameernie_tiny, ...)方式加载。提示ERNIE-Tiny 属于 Transformer 类 NLP 模块实际推理时的权重与分词器资源由 PaddleNLP 的from_pretrained机制统一管理首次使用时会在~/.paddlehub与 PaddleNLP 缓存目录中自动下载可参考 nlp_module.py 中 PretrainedModel.from_pretrained 的下载与缓存逻辑。三、模型 API 预测3.1 预测代码示例ERNIE-Tiny 模块既可以加载预训练参数直接做特征抽取也可以加载 Fine-tuning 得到的模型参数做下游任务预测。以下示例演示用文本分类任务情感二分类进行预测import paddlehub as hub data [ [这个宾馆比较陈旧了特价的房间也很一般。总体来说一般], [怀着十分激动的心情放映可是看着看着发现在放映完毕后出现一集米老鼠的动画片], [作为老的四星酒店房间依然很整洁相当不错。机场接机服务很好可以在车上办理入住手续节省时间。], ] label_map {0: negative, 1: positive} model hub.Module( nameernie_tiny, version2.0.2, taskseq-cls, load_checkpoint/path/to/parameters, label_maplabel_map) results model.predict(data, max_seq_len50, batch_size1, use_gpuFalse) for idx, text in enumerate(data): print(Data: {} \t Lable: {}.format(text, results[idx]))对应的完整可运行示例代码位于仓库的 demo/text_classification/train.py训练侧与 demo/text_classification/predict.py预测侧序列标注场景可参考 demo/sequence_labeling/train.py 与 demo/sequence_labeling/predict.py。3.2 构造参数详解__init__def __init__( taskNone, load_checkpointNone, label_mapNone, num_classes2, suffixFalse, **kwargs, )创建 Module 对象动态图组网版本各参数含义如下task任务名称支持seq-cls文本分类、token-cls序列标注、text-matching文本匹配或传None仅用于获取 Embedding。load_checkpoint使用 PaddleHub Fine-tune API 训练保存的模型参数文件路径。label_map预测时的类别映射表字典形式如{0: negative, 1: positive}。num_classes分类任务的类别数如果指定了label_map此参数可不传默认 2 分类。suffix序列标注任务的标签格式若设为True标签以-B、-I、-E或-S结尾默认False。**kwargs用户额外指定的关键字字典类型参数会透传给 PaddleNLP 的from_pretrained。结合 module.py 的源码可以进一步理解这些参数的底层行为若传入label_map则self.num_classes len(label_map)即类别数由映射表长度自动推导taskseq-cls时组网ErnieForSequenceClassification预训练名ernie-tiny损失函数为CrossEntropyLoss评估指标为paddle.metric.Accuracytasktoken-cls时组网ErnieForTokenClassification评估指标为ChunkEvaluator来自paddlenlp.metrics它会根据label_map与suffix参数计算序列标注的 F1tasktext-matching时加载裸ErnieModel并额外构造Dropout(0.1)与Linear(hidden_size * 3, 2)分类头实现文本对二分类匹配判断taskNone时只加载ErnieModel用于输出 Embedding未知任务名会抛出RuntimeError并提示支持的任务列表若load_checkpoint指向存在的文件则用paddle.load读取并set_state_dict恢复参数随后打印加载日志。3.3 推理方法详解predictdef predict( data, max_seq_len128, batch_size1, use_gpuFalse )参数说明data待预测数据格式为[[sample_a_text_a, sample_a_text_b], [sample_b_text_a, sample_b_text_b], ...]其中每个元素都是一个样例每个样例可包含text_a与text_b。每个样例文本数量1 个或 2 个需和训练时保持一致。max_seq_len模型处理文本的最大长度。batch_size模型批处理大小。use_gpu是否使用 GPU默认为False。对于 GPU 用户建议开启use_gpu。返回结果resultslist 类型不同任务类型的返回格式不同文本分类seq-cls列表包含每个句子的预测标签格式为[label_1, label_2, ...]序列标注token-cls列表包含每个句子每个 token 的预测标签格式为[[token_1, token_2, ...], [token_1, token_2, ...], ...]。从 TransformerModule.predict 的实现 可以看到predict内部会按use_gpu调用paddle.set_device(gpu/cpu)通过_batchify完成分词、编码与按batch_size切批_convert_text_to_input内部对 token-cls 任务会用reseg_token_label处理切分标签前向计算后取softmax概率的argmax再经label_map映射为可读标签TransformerModule还额外支持split_char默认\002用于 token-cls 输入 token 切分与return_prob为True时同时返回标签与概率两个参数。3.4 Embedding 特征抽取get_embeddingdef get_embedding( data, use_gpuFalse )用于获取输入文本的句子粒度特征与字粒度特征。data输入文本列表格式同上每个元素为一个样例可含text_a与text_b。use_gpu是否使用 GPU默认为False。返回resultslist 类型格式为[[sample_a_pooled_feature, sample_a_seq_feature], [sample_b_pooled_feature, sample_b_seq_feature], ...]其中每个元素是对应样例的特征输出pooled_feature为句子粒度特征seq_feature为字粒度特征。在源码中get_embedding由 TransformerModule 提供它要求task is None否则抛出RuntimeError内部等价于执行一次predict(datadata, use_gpuuse_gpu)模型前向返回(sequence_output, pooled_output)二元组见 ErnieTiny.forward其中sequence_output是每个 token 的字粒度输出、pooled_output是句子粒度的池化输出。四、下游任务 Fine-tuning 实战ERNIE-Tiny 支持三类常见 NLP 下游任务的 Fine-tuning仓库 demo 目录下提供了对应的完整训练脚本均采用「hub.Module组网 hub.Trainer训练」的标准流程。4.1 文本分类seq-cls对应脚本 demo/text_classification/train.py使用 ChnSentiCorp 中文情感分类数据集import paddle import paddlehub as hub from paddlehub.datasets import ChnSentiCorp model hub.Module(nameernie_tiny, version2.0.1, taskseq-cls) train_dataset ChnSentiCorp(tokenizermodel.get_tokenizer(), max_seq_lenargs.max_seq_len, modetrain) dev_dataset ChnSentiCorp(tokenizermodel.get_tokenizer(), max_seq_lenargs.max_seq_len, modedev) test_dataset ChnSentiCorp(tokenizermodel.get_tokenizer(), max_seq_lenargs.max_seq_len, modetest) optimizer paddle.optimizer.AdamW(learning_rateargs.learning_rate, parametersmodel.parameters()) trainer hub.Trainer(model, optimizer, checkpoint_dirargs.checkpoint_dir, use_gpuargs.use_gpu) trainer.train( train_dataset, epochsargs.num_epoch, batch_sizeargs.batch_size, eval_datasetdev_dataset, save_intervalargs.save_interval, ) trainer.evaluate(test_dataset, batch_sizeargs.batch_size)脚本默认超参数为num_epoch3、learning_rate5e-5配合 warmup 使用、max_seq_len128、batch_size32。数据集类ChnSentiCorp定义于 paddlehub/datasets/chnsenticorp.py。4.2 序列标注token-cls对应脚本 demo/sequence_labeling/train.py使用 MSRA_NER 命名实体识别数据集。与文本分类的关键差异在于token-cls 任务必须显式传入label_map源码 module.py 中ChunkEvaluator依赖label_map构造标签列表from paddlehub.datasets import MSRA_NER label_list MSRA_NER.label_list label_map {idx: label for idx, label in enumerate(label_list)} model hub.Module( nameernie_tiny, version2.0.1, tasktoken-cls, label_maplabel_map, # Required for token classification task ) tokenizer model.get_tokenizer() train_dataset MSRA_NER(tokenizertokenizer, max_seq_lenargs.max_seq_len, modetrain) dev_dataset MSRA_NER(tokenizertokenizer, max_seq_lenargs.max_seq_len, modedev) test_dataset MSRA_NER(tokenizertokenizer, max_seq_lenargs.max_seq_len, modetest) optimizer paddle.optimizer.AdamW(learning_rateargs.learning_rate, parametersmodel.parameters()) trainer hub.Trainer(model, optimizer, checkpoint_dirargs.checkpoint_dir, use_gpuargs.use_gpu) trainer.train( train_dataset, epochsargs.num_epoch, batch_sizeargs.batch_size, eval_datasetdev_dataset, save_intervalargs.save_interval, ) trainer.evaluate(test_dataset, batch_sizeargs.batch_size)训练完成后checkpoint_dir下会保存各 epoch 的参数文件如epoch_N/预测时通过load_checkpoint指向该目录下的参数文件即可。训练过程会使用 paddlehub/finetune/trainer.py 中Trainer的 checkpoint 自动续训机制启动时扫描epoch_*目录恢复current_epoch与最优指标。4.3 文本匹配text-matching对应脚本 demo/text_matching/train.py该任务在 ernie_tiny 2.0.2 版本中加入使用 LCQMC 中文问句匹配数据集from paddlehub.datasets import LCQMC model hub.Module(nameernie_tiny, version2.0.2, tasktext-matching) tokenizer model.get_tokenizer() train_dataset LCQMC(tokenizertokenizer, max_seq_lenargs.max_seq_len, modetrain) dev_dataset LCQMC(tokenizertokenizer, max_seq_lenargs.max_seq_len, modedev) test_dataset LCQMC(tokenizertokenizer, max_seq_lenargs.max_seq_len, modetest) optimizer paddle.optimizer.AdamW(learning_rateargs.learning_rate, parametersmodel.parameters()) trainer hub.Trainer(model, optimizer, checkpoint_dirargs.checkpoint_dir, use_gpuargs.use_gpu) trainer.train( train_dataset, epochsargs.num_epoch, batch_sizeargs.batch_size, eval_datasetdev_dataset, save_intervalargs.save_interval, ) trainer.evaluate(test_dataset, batch_sizeargs.batch_size)脚本默认超参数为num_epoch10、max_seq_len64、batch_size128。数据集类LCQMC定义于 paddlehub/datasets/lcqmc.py。从源码看text-matching 任务的实现思路是将 query 与 title 分别送入ErnieModel得到各自 token 向量用pad_token_id构造 attention mask 后做 token 向量加权平均得到句子向量再将[query_mean, title_mean, |query_mean - title_mean|]拼接成 3 倍 hidden_size 的特征送入Linear(hidden_size * 3, 2)分类头得到匹配概率见 ErnieTiny.forward。该结构类似经典文本匹配模型中对双塔输出的 concat 绝对差特征组合可以从源码结构直接观察到这一实现细节。4.4 Trainer 训练机制上述三个脚本都基于hub.Trainer完成训练其核心能力见 paddlehub/finetune/trainer.py包括根据use_gpu自动paddle.set_device支持多卡场景下paddle.distributed.init_parallel_envDataParallel包装checkpoint_dir自动断点续训扫描epoch_*目录找到最大 epoch 并恢复模型参数与最优指标若目录不存在则提示 start from scratchuse_vdlTrue时在checkpoint_dir/visualization下创建 VisualDL 日志通过compare_metrics回调控制最优模型保存策略默认取validation_step返回主指标较大者。五、PaddleHub Serving 服务化部署PaddleHub Serving 可以将 ERNIE-Tiny 部署为一个在线获取预训练语义特征Embedding的 HTTP 服务。5.1 第一步启动 PaddleHub Serving$ hub serving start -m ernie_tiny执行后即完成一个获取预训练词向量服务化 API 的部署默认端口号为 8866。从 paddlehub/commands/serving.py 的源码可以看到port参数的默认值即8866也可通过--port/-p指定其他端口。Serving 底层基于 Flask/gunicorn 实现见 paddlehub/serving/http_server.py。NOTE如使用 GPU 预测需要在启动服务之前设置CUDA_VISIBLE_DEVICES环境变量仅使用 CPU 时无需设置。5.2 第二步发送预测请求服务端配置好后以下代码即可发送预测请求并获取结果import requests import json # 指定用于获取 embedding 的文本 [[text_1], [text_2], ...] text [[今天是个好日子], [天气预报说今天要下雨]] # 以 key 的方式指定 text 传入预测方法时的参数此例中为 data # 对应本地部署则为 module.get_embedding(datatext) data {data: text} # 发送 post 请求content-type 类型应指定 json 方式url 中的 ip 地址需改为对应机器的 ip url http://127.0.0.1:8866/predict/ernie_tiny # 指定 post 请求的 headers 为 application/json 方式 headers {Content-Type: application/json} r requests.post(urlurl, headersheaders, datajson.dumps(data)) print(r.json())Serving 的请求处理入口是TransformerModule中带serving装饰器的predict_method见 paddlehub/module/nlp_module.py当task为seq-cls/token-cls时返回预测标签token-cls 会自动去除[CLS]与 padding token 对应的标签当task为None时走get_embedding分支返回特征向量。六、版本更新历史版本更新内容1.0.0初始发布1.0.1修复 Python 2 的兼容问题1.1.0支持get_embedding与get_params_layer2.0.0全面升级动态图版本接口有所变化2.0.1任务名称调整增加序列标注任务token-cls2.0.2增加文本匹配任务text-matching安装命令hub install ernie_tiny2.0.2仓库中 module.py 的moduleinfo声明的当前版本为2.0.2与文档一致同时源码中对旧任务名sequence_classification做了兼容处理仍可传入但会打印废弃警告并自动映射为seq-cls见 module.py这也解释了 2.0.1 版本任务名称调整的变更背景。七、总结与使用建议选型建议ERNIE-Tiny 以 346MB 的体积提供接近完整版 ERNIE 的语义理解能力适合对模型体积与推理速度有要求的场景若追求更高精度可选用同仓库中的 ernie 完整版384MB或其他更大规模模型。任务匹配情感/主题分类用seq-cls命名实体识别等序列标注用token-cls记得传label_map句子对匹配用text-matching仅需特征则taskNone配合get_embedding。预测数据格式每个样例的文本数量1 或 2 个必须与训练时保持一致否则会因 tokenizer 编码分支不匹配而报错。部署注意Serving 默认监听 8866 端口GPU 推理需提前设置CUDA_VISIBLE_DEVICES跨机器访问时把 url 中的127.0.0.1替换为服务端实际 IP。赞分享人工智能大模型微调模型推理服务【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址https://gitcode.com/gh_mirrors/pa/PaddleFormers点击查看免费下载相关推荐machine-learning-for-trading 的 SEC EDGAR 基本面数据管道10-K / 10-Q / 8-K 申报文本与 XBRL 财务面板的下载与加载实战machine learning for trading 的 SEC EDGAR 基本面数据管道10 K / 10 Q / 8 K 申报文本与 XBRL 财务人工智能大模型微调模型推理服务PaddleHub 中 ERNIE 2.0 英文预训练模型 ernie_v2_eng_base 的安装、预测与 Fine-tune 实战指南PaddleHub 中 ERNIE 2.0 英文预训练模型 ernie_v2_eng_base 的安装、预测与 Fine tune 实战指南 本文围绕 Padd人工智能大模型微调模型推理服务Wekan Planning Poker规划扑克卡片功能全解从卡片入口到源码级数据模型Wekan Planning Poker规划扑克卡片功能全解从卡片入口到源码级数据模型 本文以 Wekan 仓库中 Planning Poker 功能文档人工智能大模型微调模型推理服务上一篇5步轻松上手Flux1-dev模型在ComfyUI中的完整使用指南下一篇终极Python翻译工具deep-translator让多语言沟通零障碍创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考