百度智能云千帆 ModelBuilder 技术实践系列:通过 SDK 快速构建并发布垂域模型

​百度智能云千帆大模型平台(百度智能云千帆大模型平台 ModelBuilder)作为面向企业开发者的一站式大模型开发平台,自上线以来受到了广大开发者、企业的关注。至今已经上线收纳了超过 70 种预置模型服务,用户可以快速的调用,并部署不同的模型以寻求最适合自身业务的方案。平台提供了全流程大模型开发工具链,为成千上万的应用提供了稳定的大模型平台服务。

1        千帆 SDK 简介

在平台的基础能力之上,我们围绕大模型工具链设计了一套 SDK (https://github.com/baidubce/bce-qianfan-sdk),充分结合千帆平台的数据、模型训练、评估、部署推理等全栈 AI 能力,让开发者优雅且便捷的访问千帆大模型平台,获得更原生的模型生产开发使用体验。同时我们也提供了大模型工具链的最佳实践,降低开发者使用和学习的门槛。

相较于从千帆 Web 前端控制台构建和发布模型,使用 SDK 的方式可以使整体使用流程更贴近开发者传统的习惯。和原生调用 PaddlePaddle、PyTorch 等发起任务类似,使用代码完成全部的数据处理、洞察分析、清理增强、模型训练、参数调优、评估发布的一整套模型开发使用等流程。

此外,相较于 API 使用,SDK 封装性更好。平台层面 API 主要是一些原子性的操作接口,更符合平台的全功能设计。而 SDK 基于各业务模块进行完整逻辑封装,例如快速的鉴权集成、本地的数据集操作、训练任务 Pipeline,以方便用户更简单、更专注于工具链中的各流程中。

以模型训练为例,直接使用 API 我们可能需要涉及到数十个函数调用,而使用使用 SDK 仅需要三步即可完成一个简单的模型训练流程。此外 SDK 内置了一些额外的开发工具,并提供丰富的 cookbook,帮助用户更好上手。

通过 API 发起训练流程

通过 SDK 发起训练流程

2        千帆 SDK 能力详述

千帆 SDK 诞生的目的就是为了让开发者更贴近大模型。区别于传统的机器学习,深度学习,千帆 SDK 更专注于 Prompt 调整、推理超参搜索、训练数据准备、模型微调、大模型能力评估等关键点,致力于用简单的方式,让 LMOps 的迭代闭环。

千帆 SDK 提供的核心能力包含三大部分:大模型推理,大模型训练,以及 AI 开发工具和框架:

  • 大模型推理:实现了对文心大模型系列、开源大模型等模型推理的接口封装,支持 Chat、Completion、Embedding 等,同时也提供了 Prompt 调优,超参搜索等附加能力,以帮助优化推理效果。

  • 大模型训练:基于平台能力支持端到端的大模型训练过程,包括训练数据,精调/预训练等。

  • AI 开发工具和框架:提供了通用的 Prompt/Debug/Client 等常见 AI 开发工具和基于千帆特性适配常见的中间层拓展能力框架。

其中,千帆 SDK 通过如下功能实现了相关的能力:

1.        Dataset:数据集模块

Dataset 基于 PyArrow 实现,具有高性能、高兼容性等特点:

  • 多种数据源加载:支持本地数据集、千帆数据集、BOS 数据集、Hugging Face 数据集等众多数据源。

  • 多种格式加载:支持 JSONL、JSON、CSV、文件目录地址等格式。

  • 多种处理清洗算子:支持千帆平台,本地等数十种数据处理的清理算子

2.        Trainer:训练模块

基于千帆平台 PaaS 能力,提供稳定、可监控、多模型的训练能力:

  • 支持 SFT、PostPretrain

  • 支持数十种基础模型

  • 支持多种自定义参数调节

  • 支持训练评估指标

3.        Evaluation:评估模块

提供了多种评估方式的自由选择,包括千帆、OpenCompass 等预置的评估逻辑,同时支持本地自定义评估逻辑。

4.        Client:命令行 Client 工具

提供了便捷的命令调用多模型、Debug、发起训练、数据集加载上传等操作。

5.        Extensions:扩展功能,第三方框架适配

提供了结合 LangChain、Semantic-Kernel、OpenAI 等第三方生态以实现 AI APP 的扩展能力。

3        SDK 案例实践:法律大模型的构建与落地

案例背景:当前的通用模型,例如文心大模型、GPT、Llama 等,虽然在各种通用任务上都表现出了一定效果,但是如法律或医学,模型在领域特定知识方面仍存在不足。由于实际应用中的不同场景,例如咨询、解释分析等对于模型输出的风格和回答的要求不同,需要模型能够有较为适配的推理和解决问题的能力。这些问题在纯粹的调整 Prompt 以及 RAG 等方式的指导下是很难达到较好的效果,因此需要对模型进行 SFT 精调后进行实际业务应用。

  • 什么是 SFT:SFT,即 Supervised Fine Tuning,监督微调。监督微调是指利用预训练的神经网络模型,并在少量监督数据上进行针对特定任务的重新训练的技术。千帆大模型平台上,预置了文心大模型系列、Llama 系列、BLOOM、ChatGLM 等众多可选的大模型。除此之外,也支持 HuggingFace Transformers 的自定义上传模型进行训练微调。

案例目标:使用 SDK 完成一个最简单的 LMOps,适用于垂域模型开发场景。案例通过 SFT 精调,结合相应法律领域数据集,让模型在法律场景比较好的表现效果。在阅读完本案例后,用户若有兴趣,可以访问文章最下方 SDK 项目链接,进行更多的实践。

本文参考了 reference 的部分实现思路。 本案例重点在于介绍如何通过 SDK 实现垂类领域构建,不对最终效果做保证。以下步骤中都基于 Python SDK。更多语言支持(Go、Java、JavaScript 等)可在文章最后一节获取。

STEP 0 : 引入千帆 Python SDK 和配置鉴权

用户下载并安装千帆 SDK,在开发项目中引入 SDK 包并配置好鉴权,进入下一步开发。详情可参考快速启动指南:qianfan · PyPI

STEP 1 : 使用千帆 SDK 进行数据加载和模型训练

首先通过 SDK 引入 SFT 需要的法律问答数据集。此处引用了参考案例中的数据集文件 legal_advice.json(可以在文章最后一节获取)。

from qianfan.dataset import (
    Dataset,
    DataTemplateType,
    DataStorageType,
)
from qianfan import config

data_file = "/xxx/xxx/legal_advice.jsonl"
# 这一步需要用户自行将数据集从json转换成jsonl,并转换成平台适配的Prompt+Response数据集格式
ds = Dataset.load(data_file=data_file)
qianfan_dataset_name = "lawyera"

bos_bucket_name = "sdk-test"
bos_bucket_file_path = "/sdk_ds1/"  # your_bos_bucket_file_path
# 上传数据集文件到千帆平台
qf_ds = ds.save(
    qianfan_dataset_create_args={
        "name": qianfan_dataset_name,
        "template_type": DataTemplateType.NonSortedConversation,
        "storage_type": DataStorageType.PrivateBos,
        "storage_id": bos_bucket_name,
        "storage_path": bos_bucket_file_path,
    }
)
 

下一步创建精调训练任务并运行。这里使用了 SDK Trainer 类型中的 LLMFinetune。它内部组装了 SFT 所需要的基本 Pipeline, 用于串联数据 -> 训练 -> 模型发布 -> 服务调用等步骤,提供更简化的训练能力。

此处精调基础模型选择了 ENIIE-Speed。除 EB 系列外,SDK 也支持平台上其他的第三方模型精调。

from qianfan.trainer import LLMFinetune
from qianfan.trainer.configs import TrainConfig

trainer = LLMFinetune(
    train_type="ERNIE-Speed",
    dataset=ds,
    train_config=TrainConfig(
        peft_type="LoRA",
        epoch=10,
        learning_rate=0.0002,
        lora_rank=8,
        max_seq_len=4096,
    )
)
trainer.run()
m = trainer.output["model"]

STEP 2: 使用 Evalution 模块实现模型评估

精调完模型后,使用 SDK 进行模型评估来衡量精调效果的参考。

这里使用了 qianfan.evaluation.evaluator 模块中的裁判员评估器(QianfanRefereeEvaluator)。使用大模型对被评估大模型的回答打分,可以自定打分 prompt,打分步骤等信息。

from qianfan.evaluation.evaluator import QianfanRefereeEvaluator, QianfanRuleEvaluator
from qianfan.evaluation.consts import QianfanRefereeEvaluatorDefaultMetrics, QianfanRefereeEvaluatorDefaultSteps, QianfanRefereeEvaluatorDefaultMaxScore
from qianfan.evaluation import EvaluationManager
your_app_id = xxxxx

qianfan_evaluators = [
    QianfanRefereeEvaluator(
        app_id=your_app_id,
        prompt_metrics=QianfanRefereeEvaluatorDefaultMetrics,
        prompt_steps=QianfanRefereeEvaluatorDefaultSteps,
        prompt_max_score=QianfanRefereeEvaluatorDefaultMaxScore,
    ),
]

test_ds = Dataset.load(qianfan_dataset_id="ds-xxxx")
em = EvaluationManager(qianfan_evaluators=qianfan_evaluators)
result = em.eval([m], test_ds)
 

任务结束后,SDK 会返回 JSON 格式的评估结果,也可以在平台上看到可视化报告:

EB-Speed 做基础模型

Qianfan-Chinese-Llama-2-7B 做基础模型

STEP 3 :服务部署

在完成模型的评估后,可以对 SFT 精调后模型有一个简单的体感评估,如果效果不错,可以直接用 SDK 发布成模型服务:

from qianfan.model import Service, Model, DeployConfig
from qianfan.model.consts import ServiceType
from qianfan.resources.console.consts import DeployPoolType

sft_svc: Service = m.deploy(DeployConfig(
    name="speed_law",
    endpoint_prefix="speed_laq",
    replicas=1, # 副本数,
    pool_type=DeployPoolType.PrivateResource, # 私有资源池
    service_type=ServiceType.Chat,
))

至此,我们可以就成功完成了模型 SFT 精调并发布了更适用于法律场景的大模型服务。

STEP 4 : 使用 SDK Client 快速验证模型效果

SDK 内置了一个命令行工具,能够在终端直接与千帆平台进行交互。例如与大模型对话、发起训练任务、预览数据集等等。在这里我们用 CLI 工具快速调用模型,来比较模型在 SFT 前后针对法律问题的回答效果。

以下是使用 CLI 工具分别同时请求两组四个不同模型服务得到的效果。这 4 个模型分别为 Qianfan-Chinese-Llama-2-7B、ERNIE-Speed , 和基于这两个基础模型 SFT 微调得到的模型服务(Qianfan-Chinese-Llama-2-7B --> k0m9yafh_dalegal01,ERNIE-Speed --> x898pbzh_speed_law)。基于此可以快速的进行模型效果的验证。可以看到 SFT 后的模型回答明显更简短且部分回答带上了律师人设,更适用于法律咨询的场景。

更多参考

  • SDK 项目链接:GitHub - baidubce/bce-qianfan-sdk: Provide best practices for LMOps, as well as elegant and convenient access to the features of the Qianfan MaaS Platform. (提供大模型工具链最佳实践,以及优雅且便捷地访问千帆大模型平台) (包含 Python、Go、Java 等多语言 SDK)

  • SDK Cookbooks 链接:bce-qianfan-sdk/cookbook at main · baidubce/bce-qianfan-sdk · GitHub

  • 千帆平台 SFT 最佳实践:SFT最佳实践 - 千帆大模型平台 | 百度智能云文档

  • SFT 参考案例:GitHub - AndrewZhe/lawyer-llama: 中文法律LLaMA (LLaMA for Chinese legel domain),https://arxiv.org/abs/2305.15062 ​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/570679.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

crossover和wine哪个好 wine和crossover有什么本质区别 苹果电脑运行Windows crossover24

CrossOver是Wine的延伸产品,CrossOver可以简单的理解为类虚拟机,那么wine是什么,许多小伙伴就可能有些一知半解。CrossOver和wine哪个好,wine和CrossOver有什么本质区别呢?下文将围绕着这两个问题展开。 一、CrossOve…

一文扫盲(7):房产管理系统界面设计

本次带来第7期:房产管理系统的界面设计,从系统定义、功能模块、界面构成和设计方向四个方面讲解,大千UI工场愿意持续和大家分享,欢迎关注、点赞、转发。 一、什么是房产管理系统 房产管理系统是一种用于管理和维护房地产资产的软…

YOLO新鲜腐烂水果检测数据集:8类,11000多张图像,标注完整

YOLO新鲜腐烂水果检测数据集:8类,11000多张图像,yolo标注完整,包含烂苹果,烂香蕉,烂橙子,烂石榴,好苹果,好香蕉,好橙子,好石榴8个类别 图像统一分…

仿真软件搭建注意事项

搭建仿真软件是一个复杂的过程,涉及到软件工程、计算数学、工程学、物理学以及产品设计等多个学科的融合。以下是搭建仿真软件的注意事项: 需求分析:明确仿真软件的目标和功能需求,包括仿真的对象、仿真的精度、所需的物理模型等…

三招教你成为朋友圈运营高手,赶紧get起来!

朋友圈作为一个重要的营销推广渠道,是能够为我们带来很多收益的。今天就给大家分享朋友圈运营的三个技巧,快快Get起来吧! 第一招:明确人设定位 要在朋友圈里脱颖而出,首先我们需要明确自己的人设定位。选择一个与自己…

【Chapter3】中断与处理机调度,计算机操作系统教程,第四版,左万利,王英

文章目录 一、中断与中断系统1.1 什么是中断?1.1.1 外中断(硬件)1.1.2 异常(内中断) 1.2 中断机制的原理1.2.1 中断装置1、中断源与中断字2、中断类型与中断向量3、中断嵌套与系统栈4、中断优先级别与中断屏蔽 1.2.2 中…

【热门话题】AI作画算法原理解析

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 AI作画算法原理解析AI作画算法概述基础原理:机器学习与深度学习卷积…

基于Springboot的人职匹配推荐系统

基于SpringbootVue的人职匹配推荐系统的设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 首页 企业信息 岗位信息 新闻资讯 后台管理 用户管理 企业信息管理 岗位信…

docker系列7:docker安装ES

目录 传送门 Docker安装ES 确定版本 拉取镜像 执行拉取ES镜像 查看ES镜像 运行ES 创建一个新的docker网络 启动一个Elasticsearch容器 查看运行结果 ES启动内存不足 访问ES 公网访问 传送门 docker系列1:docker安装 docker系列2:阿里云镜…

这个禁止打字,只能发语音的AI Native产品,成了硅谷最火的社交软件

最近,一款AI驱动的社交应用AirChat在硅谷引发了热切关注,这款产品背后的AI技术可以实时将语音转录为文字,并支持多语言翻译。综合来看,AirChat的火可以持续多久呢? 过去一周,硅谷线上到处充斥着求链接的声音…

学习Django

1.python安装是会有几个主要目录: 2.如果某个路径加入了环境变量,那么在命令行直接输入他下面的文件就能找到,不用输入完整路径 2.过程 (1)安装 (2)建项目 在终端: (…

抖音 小程序 获取手机号 报错 getPhoneNumber:fail auth deny

这是因为 当前小程序没有获取 手机号的 权限 此能力仅支持小程序通过试运营期后可用,默认获取权限,无需申请; https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/guide/open-capabilities/acquire-phone-number-acqu…

vbox两步解决VirtualBox共享文件夹在Windows下的符号链接创建问题

默认情况下,VirtualBox 的共享文件夹特性在 Windows 下工作是有问题的,如果你运行一些需要符号连接(Symlink)的程序,比如默认设置的 yarn 或者 npm,由于 npm 包在安装之后会在 ./node_modules/.bin 创建在 …

11、【桥接模式】让将抽象和实现分离,使得它们可以独立地变化

你好,我是程序员雪球。 今天我们来聊聊 23 种设计模式中,一种常见的结构型模式,桥接模式。聊聊它的设计思想、应用场景,以及如何使用。 一、设计思想 桥接模式(Bridge Pattern)是一种结构型设计模式&#…

C++ 之二叉搜索树

目录 学习目标: 1.二叉搜索树 1.1二叉搜索树的概念 1.2二叉搜索树的操作 1.二叉搜索树的查找 2.二叉树的插入 3.二叉树的删除* 2.二叉搜索树的实现 3.二叉树性能分析 1.二叉搜索树 1.1二叉搜索树的概念 二叉搜索树又称二叉排序树,它或者是一棵…

spring的bean创建流程源码解析

文章目录 IOC 和 DIBeanFactoryApplicationContext实现的接口1、BeanFactory接口2、MessageSource 国际化接口3、ResourcePatternResolver,资源解析接口4、EnvironmentCapable接口,用于获取环境变量,配置信息5、ApplicationEventPublisher 事…

Java文件流练习

1 扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否要删除该文件 import java.io.File; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanne…

Windows 10 安装配置WSL2(Ubuntu 20.04)教程

Windows 10 安装配置WSL2(Ubuntu 20.04)教程 一、WSL简介 WSL(Windows Subsystem for Linux)是一个兼容层,允许在Windows 10上原生运行Linux二进制可执行文件。 二、安装WSL2 3.1 传统手动安装 更新系统&#xff…

技术速递|Java on Azure Tooling 3月更新 - Java on Azure 开发工具未来六个月路线图发布

作者:Jialuo Gan - Program Manager, Developer Division At Microsoft 排版:Alan Wang 大家好,欢迎阅读 Java on Azure 工具的三月更新。在本次更新中,我们将分享未来几个月对 Java on Azure 开发工具的投资。此外,我…

无限多交换机串联,可以将网线无限延长吗?

网线使用时为了网络质量一般不超过100m,那我每隔100m接一个交换机是不是就可以无限延长了? 完全没有问题。 但是慎用无限、永远、永恒这些字眼,“爱你到永远”这句山盟海誓,看看现在的离婚率就知道有多么不靠谱。 但是&#xff…