千帆SDK 进阶指引
大模型开发/技术交流
- LLM
- 开源大模型
- 社区上线
2023.11.083330看过
前言:
进行本章操作学习前,我们建议先了解千帆SDK基础入门的知识千帆SDK LLM 快速入门
本文基于的千帆SDK版本:qianfan==0.1.4
在开始前,我们先来介绍了解一下大模型微调的相关技术,
SFT(有监督微调)概述
什么是SFT
有监督微调(SFT)是指采用预先训练好的神经网络模型,并针对你自己的专门任务在少量的监督数据上对其进行重新训练的技术。在千帆平台上已经预置了ERNIE-Bot系列大模型和BLOOM系列大模型。
SFT在大语言模型中的应用有以下重要原因:
-
任务特定性能提升:预训练语言模型通过大规模的无监督训练学习了语言的统计模式和语义表示。然而,它在特定任务上的性能可能不如在大规模无监督数据上表现出的性能。通过在任务特定的有标签数据上进行微调,模型可以进一步学习任务相关的特征和模式,从而提高性能。
-
领域适应性:预训练语言模型可能在不同领域的数据上表现不一致。通过在特定领域的有标签数据上进行微调,可以使模型更好地适应该领域的特殊术语、结构和语义,提高在该领域任务上的效果。
-
数据稀缺性:某些任务可能受制于数据的稀缺性,很难获得大规模的标签数据。监督微调可以通过使用有限的标签数据来训练模型,从而在数据有限的情况下取得较好的性能。
-
防止过拟合:在监督微调过程中,通过使用有标签数据进行有监督训练,可以减少模型在特定任务上的过拟合风险。这是因为监督微调过程中的有标签数据可以提供更具体的任务信号,有助于约束模型的学习,避免过多地拟合预训练过程中的无监督信号。
SFT任务
鉴权
对于像训练,模型管理,服务部署等类型的SFT 相关操作使用“安全认证/Access Key”中的 Access Key ID 和 Secret Access Key 进行鉴权,无法使用获取Access Token的方式鉴权,相关 key 可以在百度智能云控制台中安全认证获取,详细流程可以参见文档。SDK层面提供了如下的鉴权传递方式。
# 通过环境变量传递(作用于全局,优先级最低)import osos.environ["QIANFAN_ACCESS_KEY"] = "..."os.environ["QIANFAN_SECRET_KEY"] = "..."# 或者调用相关接口时传递(仅作用于该请求,优先级最高)from qianfan.resources import FineTunetask = FineTune.create_task(ak="...", sk="...")
目前千帆平台支持如下 SFT 相关操作:
-
创建训练任务
-
创建任务运行
-
获取任务运行详情
-
停止任务运行
import osos.environ["QIANFAN_ACCESS_KEY"] = "..."os.environ["QIANFAN_SECRET_KEY"] = "..."from qianfan.resources import FineTune# 创建任务resp = FineTune.create_task(name="task_name", description="task_desc")# 获取返回结果task_id = resp['result']['id']print(task_id)
创建任务运行需要提供该次训练的详细配置,例如模型版本、数据集等等,且不同模型的参数配置存在差异,具体参数可以参见API 文档。
# 创建任务运行,具体参数可以参见 API 文档create_job_resp = FineTune.create_job({"taskId": task_id,"baseTrainType": "ERNIE-Bot-turbo","trainType": "ERNIE-Bot-turbo-0725","trainMode": "SFT","peftType": "LoRA","trainConfig": {"epoch": 4,"learningRate": 0.00002,"batchSize": 4,"maxSeqLen": 4096},"trainset": [{"type": 1,"id": 1234}],"trainsetRate": 20})# 获取运行 idjob_id = create_job_resp['result']['id']print(job_id)
# 根据任务和运行id,查询任务运行的具体状态job= FineTune.get_job(task_id, job_id)# 获取任务详情print(job['result'])
# 提供任务和运行 id,停止运行stop = FineTune.stop_job(task_id, job_id)# 获取停止结果print(stop['result']) # => True
大模型管理
千帆平台提供 API 接口对模型进行管理,这部分操作鉴权与 SFT 大模型调优一致,需要提供 Access Key 和 Secret Key,详见SFT 部分介绍。
目前支持的模型管理操作有:
-
获取模型详情
-
获取模型版本详情
-
训练任务发布为模型
from qianfan.resources import Modelmodel_list = Model.list(model_id = 5862)print(model_list['result']['modelVersionList'][0]['modelName'])
model_detail_resp = Model.detail(model_version_id = 5659)print(model_detail_resp['result']['modelName'])
训练任务发布为模型可以将某个已完成的训练任务得到的模型发布至模型仓库中,需要提供任务 id 等信息,字段定义与返回参数字段参见API 文档。
model_publish_resp = Model.publish(is_new=True,model_name="sdk_test_1",version_meta={"taskId": 9220, "iterationId": 5234},)print(model_publish_resp['result']['modelId'])
大模型服务
千帆平台提供 API 接口对大模型服务进行管理,这部分操作鉴权与 SFT 大模型调优一致,需要提供 Access Key 和 Secret Key,详见SFT 部分介绍。
目前支持的服务管理操作有:
-
创建服务
-
查询服务详情
创建服务可以将某个模型发布成可对外访问的服务,需要提供模型的 id、服务名称等信息,详细字段和返回参数字段参见API 文档。
from qianfan.resources import Servicesvc_create_resp = Service.create(model_id=123,model_version_id=456,name="sdk_test",uri="svc_uri",replicas=1,pool_type=2,)print(svc_create_resp['result'])
svc_resp = Service.get(id = 2047)print(svc_resp['result']['id'])
Reference:
评论