轻松上手:通过阿里云PAI QuickStart微调部署Qwen-72B-Chat模型

作者:熊兮、求伯、一耘

引言

通义千问-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)部署和微调千问大模型。

运行环境要求

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

灵骏智算资源的开通购买

通过PAI控制台使用模型

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

模型部署和调用

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

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

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

# 请注意替换为使用服务的Endpoint和Token
export API_ENDPOINT="<ENDPOINT>"
export API_TOKEN="<TOKEN>"# 查看模型list
curl $API_ENDPOINT/v1/models \-H "Content-Type: application/json" \-H "Authorization: Bearer $API_TOKEN"# 调用通用的文本生成API
curl $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|>"]
}'# 调用对话API
curl $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:

# 安装服务调用SDK
python -m pip install openai

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

import openai# 请使用服务详情页获取的访问地址(ENDPOINT)和访问凭证(TOKEN)替换以下代码的配置。
openai.api_key = "<TOKEN>"
openai.base_url = "<ENDPOINT>" + "/v1"# 调用对话API
completion = 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)

模型微调训练

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等,如下所示:

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

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

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

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

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

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

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

通过PAI Python SDK使用模型

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

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

# 安装PAI Python SDK
python -m pip install alipai --upgrade# 交互式得配置访问凭证、PAI工作空间等信息
python -m pai.toolkit.config

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

模型部署和调用

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

from pai.session import  get_default_session
from pai.model import RegisteredModelsession = 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和Token
endpoint = predictor.internet_endpoint
token = predictor.access_token

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

模型微调训练

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

from pai.model import RegisteredModel# 获取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,设置训练任务使用的资源信息。同时在提交训练作业之前,用户可以根据算法的超参支持,配置合适的训练任务超参。


# 配置训练作业使用的灵骏资源配额ID
est.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 的控制台上查看训练进度详情以及日志信息。

from pai.common.oss_utils import download# 获取算法的输入数据,包括具体的模型和供测试的公共读数据集.
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())

结论

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

相关资料

  • PAI 快速开始:

PAI快速开始功能的介绍/计费/权限/开通/使用_人工智能平台 PAI(PAI)-阿里云帮助中心

  • 通义千问系列模型:

ModelScope 魔搭社区

  • PAI Python SDK:

https://github.com/aliyun/pai-python-sdk

  • 阿里云PAI灵骏智算服务:

智算服务PAI-灵骏_AI算力_机器学习PAI_大数据-阿里云

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新年钜惠|泰迪智能科技免费协助企业完成3个行业AI案例建模

在新年到来之际&#xff0c;为了感谢各企业一直以来对泰迪智能科技的支持&#xff0c;日前我们推出了新年钜惠活动即&#xff1a;免费协助企业完成3个行业AI案例建模。我们希望通过这样的活动&#xff0c;可以帮助更多的企业迈出AI应用的第一步&#xff0c;同时我们也希望能够为…

如何在阿里云提交使用工单

有时候大家在使用阿里云的服务时候&#xff0c;可能会遇到一些问题&#xff0c;或许是云服务器如何升级了如何改套餐啊之类的&#xff0c;亦或者是域名ICP备案啊看进度啊等等问题&#xff0c;遇到问题怎么办不要慌。我们可以使用阿里云的工单系统&#xff0c;阿里云工单系统可以…

Linux命令大全

文章目录 目录操作与文件管理系统信息与管理软件包管理和系统维护压缩与解压缩网络与通信辅助工具与信息获取文本处理与搜索时间与日期操作网络连接与通信&#xff08;补充&#xff09;链接管理磁盘与存储管理环境变量与路径设置用户和组管理查看系统信息 当然&#xff0c;以下…

Python使用pip命令安装外部库-项目内安装外部库-全局安装外部库

一、前言 在进行Python项目开发时需要安装一些外部库来扩展项目功能&#xff0c;因此需要了解pip命令的详细使用。 二、基本语法 1.安装库 pip install 包名 2.安装特定版本 pip install 包名版本号 3.升级库 pip install --upgrade 包名 4.卸载库 pip uninstall 包名 5.查看已…

搜索与图论第七期 Prime算法

前言 prime算法也是一种图的结构 &#xff0c;哎图的结构还有好多好多&#xff0c;大家慢慢学吧&#xff01;&#xff01;&#xff01; 一、prime 算法的基本内容 过程&#xff1a; 最小生成树prim算法简单理解他的寻找路径的过程&#xff0c;从一个顶点V0开始&#xff0c;…

字节跳动 ByteHouse 云原生之路 – 计算存储分离与性能优化

01 起源 ByteHouse 的故事从字节跳动对于先进数据处理和分析的需求开始&#xff0c;这一需求随着公司业务规模的迅速扩张而日益增长&#xff0c;起源是对开源数据库管理系统 ClickHouse 的改造和增强。面对数据处理的高延迟、大规模数据操作的复杂性以及数据存储和处理成本的上…

【SGX系列教程】(一)Intel-SGX SDK在ubuntu22.04下安装全流程

文章目录 一.概述1.1 SGX三大组件1.2 SGXDataCenterAttestationPrimitives 二.安装流程2.1 检查服务器是否支持SGX2.2 sgx硬件/软件开启方法2.3 sgx dirver驱动安装&#xff1b;2.3.1 linux-sgx-driver驱动程序2.3.2 Intel SGX Support in the Linux Kernel&#xff08;linux内…

线程的同步和互斥学习笔记

目录 互斥锁的概念和使用 线程通信-互斥 互斥锁的创建和销毁 申请锁-pthread_mutex_lock 释放锁-pthread_mutex_unlock 读写锁的概念和使用 死锁的避免 互斥锁的概念和使用 线程通信-互斥 临界资源 一次只允许一个任务&#xff08;进程、线程&#xff09;访问的共享资…

电脑有网,浏览器连不上网,其他应用却能用

当我们访问浏览器的时候显示&#xff0c;你尚未链接&#xff0c;代理服务器可能有问题&#xff0c;或地址不正确的时候.可你的wifi任然是连接的&#xff0c;但是只有浏览器用不了&#xff0c;微信和其他程序都可以正常连接&#xff0c;这是为什么呢&#xff1f; 绝大多数是因为…

K8S的HPA

horiztal Pod Autoscaling&#xff1a;pod的水平自动伸缩&#xff0c;这是k8s自带的模块&#xff0c;它是根据Pod占用cpu比率到达一定的阀值&#xff0c;会触发伸缩机制 Replication controller 副本控制器&#xff1a;控制pod的副本数 Deployment controller 节点控制器&…

云原生网关哪家强:Sealos 网关血泪史

作者&#xff1a;Sealos 创始人&#xff0c;环界云计算 CEO 方海涛 Sealos 公有云 &#xff08;https://cloud.sealos.io&#xff09; 几乎打爆了市面上所有主流的开源网关&#xff0c;本文可以给大家很好的避坑&#xff0c;在网关选型方面做一些参考。 Sealos Cloud 的复杂场…

jenkins安装配置,使用Docker发布maven项目全过程记录(1)

使用的CentOS8 系统&#xff0c;其它Linux系统类似 1、jenkins安装 1.1、配置JAVA环境 使用的服务器环境中&#xff0c;安装了Java1.8与Java17&#xff0c;当前jenkins的最低java版本要求java11。系统默认使用的是java1.8&#xff0c;因此需要切换环境。 alternatives --co…

Qt采集本地摄像头推流成rtsp/rtmp(可网页播放/支持嵌入式linux)

一、功能特点 支持各种本地视频文件和网络视频文件。支持各种网络视频流&#xff0c;网络摄像头&#xff0c;协议包括rtsp、rtmp、http。支持将本地摄像头设备推流&#xff0c;可指定分辨率和帧率等。支持将本地桌面推流&#xff0c;可指定屏幕区域和帧率等。自动启动流媒体服…

flink-java使用介绍,flink,java,DataStream API,DataSet API,ETL

1、环境准备 文档&#xff1a;https://nightlies.apache.org/flink/flink-docs-release-1.17/zh/ 仓库&#xff1a;https://github.com/apache/flink 下载&#xff1a;https://flink.apache.org/zh/downloads/ 下载指定版本&#xff1a;https://archive.apache.org/dist/flink…

Spring复习-问题回答

1.什么是 spring&#xff0c;你对 spring 的理解? Spring是一个轻量级&#xff0c;非侵入式的&#xff08;不使用框架特定的类&#xff0c;感受不到框架&#xff09;IOC和AOP一站式的java后端开发框架&#xff0c;简化企业开发。 2.spring 的优缺点 优点&#xff1a; Spr…

STL第二讲

第二讲 视频标准库源码版本&#xff1a;gnu c 2.9.1/4.9/Visual C OOP vs GP GP是将datas与methods分开&#xff0c;OOP相反&#xff1b; 为什么list不能使用全局的sort&#xff1f; 因为sort源代码&#xff1a; *(first (last - first)/2) // 此迭代器只能是随机访问迭代…

使用 Python 数据写入 Excel 工作表

在数据处理和报告生成等工作中&#xff0c;Excel 表格是一种常见且广泛使用的工具。然而&#xff0c;手动将大量数据输入到 Excel 表格中既费时又容易出错。为了提高效率并减少错误&#xff0c;使用 Python 编程语言来自动化数据写入 Excel 表格是一个明智的选择。Python 作为一…

【nginx实战】nginx正向代理、反向代理、由反向代理实现的负载均衡、故障转移详解

文章目录 一. 正向代理与反向代理的概念二. Nginx服务器的正向代理服务1. Nginx服务器正向代理服务的配置的3个指令1.1. resolver指令1.2. resolver_timeout指令1.3. proxy_pass指令 2. Nginx服务器正向代理服务的使用 三. Nginx服务器的反向代理服务1. 反向代理的基本指令1.1.…

docker使用笔记

最近在使用docker配置小米cyberdog2的环境&#xff0c;记录一下常用的命令&#xff0c;以备今后查阅。 0. 基本概念 Dockerfile&#xff1a;环境的配置信息&#xff0c;里面描述了你想要搭建的环境的信息。 Image(镜像)&#xff1a;类比我们装虚拟机/操作系统时需要的系统镜像…

git本地分支的合并/切换分支时遇到的问题

目录 第一章、本地分支的切换测试1.1&#xff09;切换之前的master分支下文件内容1.2&#xff09;切换到develop分支后修改文件1.3&#xff09;切回master分支出现报错&#xff1a; 第二章、解决方式2.1&#xff09;方式1&#xff1a;commit提交修改2.2&#xff09;方式2&#…