通义千问Qwen-72B-Chat基于PAI的低代码微调部署实践

本文涉及的产品
交互式建模 PAI-DSW,5000CU*H 3个月
简介: 本文将以 Qwen-72B-Chat 为例,介绍如何通过PAI平台的快速开始(PAI-QuickStart)部署和微调千问大模型。

1.引言


通义千问-72B(Qwen-72B)是阿里云研发的通义千问大模型系列的720亿参数规模模型。Qwen-72B的预训练数据类型多样、覆盖广泛,包括大量网络文本、专业书籍、代码等。Qwen-72B-Chat是在Qwen-72B的基础上,使用对齐机制打造的基于大语言模型的AI助手。

阿里云人工智能平台PAI是面向开发者和企业的机器学习/深度学习平台,提供AI开发全链路服务。快速开始(PAI-QuickStart)是阿里云人工智能平台PAI的产品组件,它集成了国内外 AI 开源社区中优质的预训练模型,支持零代码和 SDK 的方式实现从训练到部署再到推理的全过程,大大简化了模型的开发和部署,为开发者和企业用户带来了更快、更高效、更便捷的 AI 开发和应用体验。

本文将以 Qwen-72B-Chat 为例,介绍如何通过PAI平台的快速开始(PAI-QuickStart)部署和微调千问大模型。


2.运行环境要求


  • 本示例目前仅支持在阿里云乌兰察布地域,使用灵骏集群环境运行。
  • 资源配置要求:GPU 推荐使用 GU108(80GB),推理需要4卡及以上资源,微调需要4机32卡及以上资源。
  • 阿里云 PAI 灵骏智算服务资源开通和管理请参考官网文档:

灵骏智算资源的开通购买


3.通过PAI控制台使用模型


开发者可以在 PAI 控制台的“快速开始”入口,找到 Qwen-72B-Chat 的模型,Qwen-72B-Chat 的模型卡片如下图所示:

image.png

3.1模型部署和调用

通过“模型部署”入口,用户选择使用的灵骏资源信息,点击部署按钮,即可将模型部署到 PAI-EAS 推理服务平台。

image.png

通过部署的在线服务的详情页,用户可以查看服务访问地址(Endpoint)和访问凭证(Token),然后用于调用推理HTTP API。使用 cURL 调用推理服务的示例如下。

注意,因为模型较大,加载时间较长,用户可以在服务启动之后,通过以下的“查看模型列表”API查看服务当前加载完成的模型。

# 请注意替换为使用服务的Endpoint和TokenexportAPI_ENDPOINT="<ENDPOINT>"exportAPI_TOKEN="<TOKEN>"# 查看模型listcurl$API_ENDPOINT/v1/models \
-H"Content-Type: application/json" \
-H"Authorization: Bearer $API_TOKEN"# 调用通用的文本生成APIcurl$API_ENDPOINT/v1/completions \
-H"Content-Type: application/json" \
-H"Authorization: Bearer $API_TOKEN" \
-d'{"model": "qwen-72b-chat",
"prompt": "San Francisco is a",
"max_tokens": 256,
"temperature": 0,
"stop": ["<|im_end|>", "<|im_start|>"]
}'# 调用对话APIcurl$API_ENDPOINT/v1/chat/completions \
-H"Authorization: Bearer $API_TOKEN" \
-H"Content-Type: application/json" \
-d'{"model": "qwen-72b-chat",
"messages": [
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "介绍一下上海的历史"}
      ],
"stop": ["<|im_end|>", "<|im_start|>"]
}'

用户也可以通过 openai SDK 的方式进行调用,首先需要安装调用SDK:

# 安装服务调用SDKpython-mpipinstallopenai

通过 SDK 调用服务的示例如下,请注意替换代码中使用的访问地址和访问凭证。

importopenai# 请使用服务详情页获取的访问地址(ENDPOINT)和访问凭证(TOKEN)替换以下代码的配置。openai.api_key="<TOKEN>"openai.base_url="<ENDPOINT>"+"/v1"# 调用对话APIcompletion=openai.chat.completions.create(
model="qwen-72b-chat",
temperature=0.0,
top_p=0.8,
frequency_penalty=0.0,
messages=[{"role": "user", "content": "请介绍下你自己。"}],
stop=["<|im_end|>", "<|im_start|>"],
# stream=True,)
# 打印输出内容print(completion.choices[0].message.content)

3.2模型微调训练

PAI-QuickStart 支持的 Qwen-72B-Chat 的全量参数微调基于 Megatron-LM 的训练流程,支持了数据并行、算子拆分、流水并行、序列并行、选择性激活重算、Zero显存优化等技术,大幅提升大模型分布式训练效率。在这一算法组件中,我们提前对模型Checkpoint进行了切分,适配多机多卡环境训练,开发者只需根据格式要求准备训练集和验证集,配置任务超参数或是使用模型预置的默认超参,就可以一键拉起训练任务。

微调算法的超参支持如下:

超参数

类型

默认值

是否必须

描述

learning_rate

Float

1e-05

True

用于控制模型权重更新的步长。

min_learning_rate

Float

1e-05

True

最小学习速率是在使用动态调整学习速率策略时设置的下限。

sequence_length

Int

2048

True

序列长度是指模型在一次训练中处理的输入数据的长度。

save_interval

Int

1000

True

保存间隔是指模型在训练过程中每隔多少迭代次数保存一次模型状态。

train_iters

Int

2000

True

训练迭代次数是指模型在整个训练过程中将完成的总迭代次数。

learning_rate_warmup_iters

Int

0

True

学习速率预热迭代次数是指在训练开始的一段时间内,学习速率将逐渐从较低值增加到预设的学习速率的过程中所经过的迭代次数。

通过模型详情的“微调训练”入口,我们可以根据实际需求调整超参数,例如learning_rate、sequence_length、train_iters等,如下所示:

image.png

算法的训练和验证数据集接受Json格式输入,每条数据由问题、答案组成,分别用"instruction"和"output"字段表示,例如:

[
    {
"instruction": "写一首以“寓居夜感”为题的诗:",
"output": "独坐晚凉侵,客窗秋意深。风沙疑化雾,夜气欲成霖。家务劳人倦,浓茶代酒斟。哀鸿鸣四野,一并助长吟。"     },
    {
"instruction": "写一首以“次答友人思乡诗”为题的诗:",
"output": "阅尽沧桑万事空,何如归卧夕阳中。并州最是伤心地,四十馀年噩梦同。"     }
]

用户可以通过将数据准备到到OSS Bucket上,然后在“数据集”配置中选择使用。

image.png

当前算法仅支持使用灵骏资源进行训练,在提交训练作业之前,用户需要配置使用的灵骏资源ID。

在完成以上配置之后,点击“训练”按钮,PAI-QuickStart自动跳转到模型训练页面,并且开始进行训练,用户可以查看训练任务状态和训练日志,如下所示:

image.png

在训练结束后,可以在输出路径的OSS Bucket中查看每次保存的Checkpoint模型切片,如下所示:

image.png

用户可以根据实际情况,选择最合适的Checkpoint进行推理和部署,具体流程参见这里,本文不再赘述。


4.通过PAI Python SDK使用模型


PAI-QuickStart 提供的预训练模型,也支持通过PAI Python SDK进行调用,详细流程可以参考文档:使用预训练模型 — PAI Python SDK

我们首先需要安装和配置PAI Python SDK,开发者可以在命令行执行以下代码完成。

# 安装PAI Python SDKpython-mpipinstallalipai--upgrade# 交互式得配置访问凭证、PAI工作空间等信息python-mpai.toolkit.config

如何获取 SDK 配置所需的访问凭证(AccessKey),PAI 工作空间等信息请参考文档:如何安装和配置PAI Python SDK

4.1模型部署和调用

通过 PAI Python SDK 提供的便利方法,开发者通过数行代码,即可将 Qwen-72B-Chat 模型部署到 PAI-EAS,创建一个在线推理服务。

frompai.sessionimportget_default_sessionfrompai.modelimportRegisteredModelsession=get_default_session()
# 获取PAI QuickStart 提供的qwen-72b-chat模型m=RegisteredModel(
model_name="qwen-72b-chat",
model_provider="pai",
)
# 部署推理服务predictor=m.deploy(
service_name="qwen_72b_chat_{}".format(random_str(6)),
options={
# 资源配额ID"metadata.quota_id": "<LingJunResourceQuotaId>",
"metadata.quota_type": "Lingjun",
"metadata.workspace_id": session.workspace_id,
    }
)
# 查看服务的Endpoint和Tokenendpoint=predictor.internet_endpointtoken=predictor.access_token

模型服务的调用,请参考以上章节,在此不再赘述。

4.2模型微调训练

通过 SDK 获取 PAI QuickStart 提供的预训练模型之后,我们可以查看模型配置的微调算法,包括算法支持的超参配置以及输入输出数据。

frompai.modelimportRegisteredModel# 获取PAI QuickStart 提供的Qwen-72b-Chat模型m=RegisteredModel(
model_name="qwen-72b-chat",
model_provider="pai",
)
# 获取模型配置的微调算法est=m.get_estimator()
# 查看算法支持的超参,以及算法输入输出信息print(est.hyperparameter_definitions)
print(est.input_channel_definitions)

目前,Qwen-72B-Chat 提供的微调算法仅支持灵骏资源,开发者需要通过 PAI 的控制台页面,查看当前的资源配额 ID,设置训练任务使用的资源信息。同时在提交训练作业之前,用户可以根据算法的超参支持,配置合适的训练任务超参。

# 配置训练作业使用的灵骏资源配额IDest.resource_id="<LingjunResourceQuotaId>"# 配置训练作业超参hps= {
"learning_rate": 1e-5,
"save_interval": 500,
}
est.set_hyperparameters(**hps)

微调算法支持3个输入,分别为:

  1. model:Qwen-72b-Chat预训练模型
  2. train:微调使用的训练数据集
  3. validation:微调使用的验证数据集
# 查看模型微调算法的使用的输入信息print(m.get_estimator_inputs())
# {#     "model": "oss://pai-quickstart-cn-wulanchabu.oss-cn-wulanchabu-internal.aliyuncs.com/huggingface/models/qwen-72b-chat/megatron/",#     "train": "oss://pai-quickstart-cn-wulanchabu.oss-cn-wulanchabu-internal.aliyuncs.com/huggingface/datasets/llm_instruct/ch_poetry_train.json",#     "validation": "oss://pai-quickstart-cn-wulanchabu.oss-cn-wulanchabu-internal.aliyuncs.com/huggingface/datasets/llm_instruct/ch_poetry_test.json",# }

开发者可以参考以上的训练数据格式准备数据,然后将trainvalidation输入替换为自己的训练和验证数据集,即可轻松得提交模型微调训练作业。通过 SDK 打印的训练作业链接,用户可以在 PAI 的控制台上查看训练进度详情以及日志信息。

frompai.common.oss_utilsimportdownload# 获取算法的输入数据,包括具体的模型和供测试的公共读数据集.training_inputs=m.get_estimator_inputs()
# 替换使用开发者自己的训练数据# training_inputs["train"] = "oss://<BucketName>/path/to/train/data.json"# training_inputs["validation"] = "oss://<BucketName>/path/to/validation/data.json"# 提交训练作业,并等待到训练作业结束est.fit(
inputs=training_inputs)
# 查看保存在OSS Bucket上的模型路径print(est.model_data())
# 用户可以通过ossutils,或是SDK提供的便利方法下载相应的模型到本地download(est.model_data())


5.结论


阿里云 PAI-QuickStart 提供了对 Qwen-72B-Chat 模型微调训练和部署开箱即用的体验,简化了 AI 开发流程,帮助开发者和企业用户使用大语言模型加速创新,创造更多的价值。


6.相关资料


相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
1月前
|
机器学习/深度学习 数据采集 数据处理
构建高效机器学习模型的策略与实践
【2月更文挑战第14天】 在数据驱动的时代,机器学习已成为智能系统的核心。本文将探讨构建高效机器学习模型的关键技术要素,包括数据预处理、特征工程、模型选择和调参策略等。通过实例分析,我们将展示如何优化模型性能,减少过拟合风险,并提高泛化能力。文章旨在为开发者提供实用的技术指导,帮助他们在实际项目中实现机器学习模型的高效构建与应用。
|
1月前
|
机器学习/深度学习 数据采集 监控
构建高效机器学习模型的策略与实践
【2月更文挑战第23天】 在数据科学领域,构建一个高效的机器学习模型是至关重要的。本文旨在探讨并提出一系列策略和最佳实践,以指导读者如何从数据处理到模型部署的各个阶段优化其机器学习项目。我们将重点讨论特征工程、算法选择、超参数调整以及模型评估等关键环节,并通过案例分析展示如何应对常见的挑战和误区。文章的目的是为从业者提供实用的指南,帮助他们构建出既准确又高效的机器学习系统。
|
5天前
|
存储 JSON 自然语言处理
大模型服务平台百炼之模型训练与调优实践分享|快来围观~
模型调优是通过Fine-tuning训练模式提高模型效果的功能模块,作为重要的大模型效果优化方式,用户可以通过构建符合业务场景任务的训练集,调整参数训练模型,训练模型学习业务数据和业务逻辑,最终提高在业务场景中的模型效果。
|
13天前
|
机器学习/深度学习 JavaScript 前端开发
机器学习模型部署:使用Python和Vue搭建用户友好的预测界面
【4月更文挑战第10天】本文介绍了如何使用Python和Vue.js构建机器学习模型预测界面。Python作为机器学习的首选语言,结合Vue.js的前端框架,能有效部署模型并提供直观的预测服务。步骤包括:1) 使用Python训练模型并保存;2) 创建Python后端应用提供API接口;3) 利用Vue CLI构建前端项目;4) 设计Vue组件实现用户界面;5) 前后端交互通过HTTP请求;6) 优化用户体验;7) 全面测试并部署。这种技术组合为机器学习模型的实用化提供了高效解决方案,未来有望更加智能和个性化。
|
29天前
|
机器学习/深度学习 JSON 分布式计算
机器学习PAI常见问题之部署报错如何解决
PAI(平台为智能,Platform for Artificial Intelligence)是阿里云提供的一个全面的人工智能开发平台,旨在为开发者提供机器学习、深度学习等人工智能技术的模型训练、优化和部署服务。以下是PAI平台使用中的一些常见问题及其答案汇总,帮助用户解决在使用过程中遇到的问题。
|
30天前
|
机器学习/深度学习 前端开发 算法
利用机器学习优化Web前端性能的探索与实践
本文将介绍如何利用机器学习技术来优化Web前端性能,探讨机器学习在前端开发中的应用,以及通过实际案例展示机器学习算法对前端性能优化的效果。通过结合前端技术和机器学习,提升Web应用的用户体验和性能表现。
|
1月前
|
机器学习/深度学习 数据采集 人工智能
构建高效机器学习模型的策略与实践
【2月更文挑战第26天】 在当今数据驱动的时代,构建高效的机器学习模型已经成为了企业获取竞争优势的关键。本文将探讨一系列实用的策略和技术,旨在指导读者如何从数据准备到模型部署的全过程中优化其机器学习项目。我们将重点讨论特征工程的重要性、超参数调优的技巧、以及模型评估和验证的最佳实践。通过这些方法的应用,读者可以提升模型的性能,确保在现实世界的复杂问题中达到更高的准确率和泛化能力。
|
1月前
|
机器学习/深度学习 数据采集 大数据
构建高效机器学习模型的策略与实践
【2月更文挑战第26天】 在数据驱动的时代,机器学习已成为解决复杂问题的重要工具。本文旨在探讨如何构建高效的机器学习模型,从数据预处理、特征选择、模型调优等方面进行详细阐述。我们将介绍一些实用的技巧和方法,帮助读者提高模型的性能和泛化能力。
|
1月前
|
机器学习/深度学习 算法 数据处理
构建高效机器学习模型的策略与实践
【2月更文挑战第25天】本文旨在探讨如何通过一系列策略性步骤来构建一个高效的机器学习模型。我们将从数据处理的重要性讲起,接着讨论特征选择的艺术以及模型训练的技巧。文章将提供实用的建议,并通过案例分析展示如何在实践中应用这些策略,以期帮助数据科学家和开发者提高他们的模型性能。
|
1月前
|
机器学习/深度学习 数据采集 算法
构建高效机器学习模型的策略与实践
【2月更文挑战第23天】 在数据驱动的时代,机器学习已成为解决复杂问题的重要工具。本文旨在探讨构建高效机器学习模型的关键策略与实践方法,通过分析数据预处理、特征工程、模型选择及调参等步骤,提出提升模型性能的有效途径。文中将结合案例分析,展示如何在实际项目中应用这些策略,以期为读者提供一套系统的方法论,帮助其优化机器学习工作流程,提高问题解决效率。