通义千问Qwen-72B-Chat大模型在PAI平台的微调实践

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

作者:熊兮、贺弘、临在

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

阿里云人工智能平台PAI是面向开发者和企业的机器学习/深度学习平台,提供包含数据标注、模型构建、模型训练、模型部署、推理优化在内的AI开发全链路服务。

本文将以Qwen-72B-Chat为例,介绍如何在PAI平台的快速开始PAI-QuickStart和交互式建模工具PAI-DSW中高效微调千问大模型。

使用PAI-DSW快速体验和轻量化微调Qwen-72B-Chat

PAI-DSW是云端机器学习开发IDE,为用户提供交互式编程环境,同时提供了丰富的计算资源。Qwen-72B-Chat的教程可以在智码实验室(https://gallery.pai-ml.com/)Notebook Gallery中检索到,参见下图:

image.png

上述Notebook可以使用阿里云PAI-DSW的实例打开,并且需要选择对应的计算资源和镜像。

快速体验Qwen-72B-Chat

首先,我们在DSW调用ModelScope快速体验Qwen-72B-Chat模型进行对话。在安装完ModelScope相关依赖后,我们可以运行如下Python代码:

frommodelscopeimportAutoModelForCausalLM, AutoTokenizerfrommodelscopeimportGenerationConfig# Note: The default behavior now has injection attack prevention off.tokenizer=AutoTokenizer.from_pretrained("qwen/Qwen-72B-Chat", revision='master', trust_remote_code=True)
# use bf16# model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-72B-Chat", device_map="auto", trust_remote_code=True, bf16=True).eval()# use fp16# model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-72B-Chat", device_map="auto", trust_remote_code=True, fp16=True).eval()# use cpu only# model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-72B-Chat", device_map="cpu", trust_remote_code=True).eval()# use auto mode, automatically select precision based on the device.model=AutoModelForCausalLM.from_pretrained("qwen/Qwen-72B-Chat", revision='master', device_map="auto", trust_remote_code=True).eval()
# 第一轮对话 1st dialogue turnresponse, history=model.chat(tokenizer, "你好", history=None)
print(response)
# 你好!很高兴为你提供帮助。# 第二轮对话 2nd dialogue turnresponse, history=model.chat(tokenizer, "给我讲一个年轻人奋斗创业最终取得成功的故事。", history=history)
print(response)
# 这是一个关于一个年轻人奋斗创业最终取得成功的故事。# 故事的主人公叫李明,他来自一个普通的家庭,父母都是普通的工人。从小,李明就立下了一个目标:要成为一名成功的企业家。# 为了实现这个目标,李明勤奋学习,考上了大学。在大学期间,他积极参加各种创业比赛,获得了不少奖项。他还利用课余时间去实习,积累了宝贵的经验。# 毕业后,李明决定开始自己的创业之路。他开始寻找投资机会,但多次都被拒绝了。然而,他并没有放弃。他继续努力,不断改进自己的创业计划,并寻找新的投资机会。# 最终,李明成功地获得了一笔投资,开始了自己的创业之路。他成立了一家科技公司,专注于开发新型软件。在他的领导下,公司迅速发展起来,成为了一家成功的科技企业。# 李明的成功并不是偶然的。他勤奋、坚韧、勇于冒险,不断学习和改进自己。他的成功也证明了,只要努力奋斗,任何人都有可能取得成功。# 第三轮对话 3rd dialogue turnresponse, history=model.chat(tokenizer, "给这个故事起一个标题", history=history)
print(response)
# 《奋斗创业:一个年轻人的成功之路》

为了节省显存,ModelScope也支持使用Int4/Int8量化模型:

frommodelscopeimportAutoModelForCausalLM, AutoTokenizerfrommodelscopeimportGenerationConfigtokenizer=AutoTokenizer.from_pretrained("Qwen/Qwen-72B-Chat-Int4", revision='master', trust_remote_code=True)
model=AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen-72B-Chat-Int4",
device_map="auto",
trust_remote_code=True).eval()
response, history=model.chat(tokenizer, "你好", history=None)

轻量化微调Qwen-72B-Chat

轻量化微调Qwen-72B-Chat最佳实践支持最主流的轻量化微调算法LoRA,并且需要使用GU108(80GB)4卡及以上资源进行计算。以下,我们简述轻量化微调Qwen-72B-Chat的算法流程。首先,我们下载Qwen-72B-Chat的Checkpoint和用于LoRA微调的数据集,用户也可以按照上述格式自行准备数据集。

defaria2(url, filename, d):
!aria2c--console-log-level=error-c-x16-s16 {url} -o {filename} -d {d}
qwen72b_url=f"http://pai-vision-data-inner-wulanchabu.oss-cn-wulanchabu-internal.aliyuncs.com/qwen72b/Qwen-72B-Chat-sharded.tar"aria2(qwen72b_url, qwen72b_url.split("/")[-1], "/root/")
!cd/root&&tar-xvfQwen-72B-Chat-sharded.tar!wget-chttp://pai-vision-data-inner-wulanchabu.oss-cn-wulanchabu.aliyuncs.com/qwen72b/sharegpt_zh_1K.json-P/workspace/Qwen

第二步,我们可以修改示例命令的超参数,并且拉起训练任务。

!cd/workspace/Qwen&&CUDA_DEVICE_MAX_CONNECTIONS=1torchrun--nproc_per_node8 \
--nnodes1 \
--node_rank0 \
--master_addrlocalhost \
--master_port6001 \
finetune.py \
--model_name_or_path/root/Qwen-72B-Chat-sharded \
--data_pathsharegpt_zh_1K.json \
--bf16True \
--output_dir/root/output_qwen \
--num_train_epochs1 \
--per_device_train_batch_size1 \
--per_device_eval_batch_size1 \
--gradient_accumulation_steps8 \
--evaluation_strategy"no" \
--save_strategy"steps" \
--save_steps1000 \
--save_total_limit1 \
--learning_rate3e-4 \
--weight_decay0.1 \
--adam_beta20.95 \
--warmup_ratio0.01 \
--lr_scheduler_type"cosine" \
--logging_steps1 \
--report_to"none" \
--model_max_length2048 \
--lazy_preprocessTrue \
--use_lora \
--gradient_checkpointing \
--deepspeedfinetune/ds_config_zero3.json

当训练结束后,将LoRA权重合并到模型Checkpoint。

frompeftimportAutoPeftModelForCausalLMmodel=AutoPeftModelForCausalLM.from_pretrained(
'/root/output_qwen', # path to the output directorydevice_map="auto",
trust_remote_code=True).eval()
merged_model=model.merge_and_unload()
merged_model.save_pretrained('/root/qwen72b_sft', max_shard_size="2048MB", safe_serialization=True)
!cp/root/Qwen-72B-Chat-sharded/qwen.tiktoken/root/qwen72b_sft/!cp/root/Qwen-72B-Chat-sharded/tokenization_qwen.py/root/qwen72b_sft/!cp/root/Qwen-72B-Chat-sharded/tokenizer_config.json/root/qwen72b_sft/

最后,我们使用轻量化微调后的Qwen-72B-Chat模型进行推理。以推理框架vllm为例,推理接口如下:

fromvllmimportLLMfromvllm.sampling_paramsimportSamplingParamsqwen72b=LLM("/root/qwen72b_sft/", tensor_parallel_size=2, trust_remote_code=True, gpu_memory_utilization=0.99)
samplingparams=SamplingParams(temperature=0.0, max_tokens=512, stop=['<|im_end|>'])
prompt="""<|im_start|>system<|im_end|><|im_start|>user<|im_end|>Hello! What is your name?<|im_end|><|im_start|>assistant"""output=qwen72b.generate(prompt, samplingparams)
print(output)

其中,tensor_parallel_size需要根据DSW示例配置中的GPU数量进行调整。

使用PAI-QuickStart全量参数微调Qwen-72B-Chat

快速开始(PAI-QuickStart)是PAI产品组件,集成了国内外AI开源社区中优质的预训练模型,支持零代码实现全量参数微调Qwen-72B-Chat。PAI-QuickStart的这一款全量参数微调组件使用PAI灵骏智算服务作为底层计算资源,使用4机32卡(每卡80GB显存)进行训练。Qwen-72B-Chat的全量参数微调基于Megatron-LM的训练流程,支持了数据并行、算子拆分、流水并行、序列并行、选择性激活重算、Zero显存优化等技术,大幅提升大模型分布式训练效率。在这一组件中,我们提前对模型Checkpoint进行了切分,适配多机多卡环境训练,用户只需要根据格式上传训练集和验证集,填写训练时候使用的超参数就可以一键拉起训练任务。

Qwen-72B-Chat的模型卡片如下图所示:

image.png

我们可以根据实际需求调整超参数,例如learning_rate、sequence_length、train_iters等,如下所示:

image.png

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

image.png

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

image.png

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

相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
13天前
|
机器学习/深度学习 数据采集 算法
构建高效机器学习模型的策略与实践
【5月更文挑战第20天】 在数据驱动的时代,构建高效的机器学习模型是获取洞察力和预测未来趋势的关键。本文将探讨一系列策略和技术,旨在优化模型性能,包括数据预处理、特征工程、模型选择、超参数调优以及评估方法。我们将深入分析这些步骤如何共同作用,提升模型的泛化能力并防止过拟合。通过案例研究和最佳实践的分享,读者将获得一套实用的工具集,以应对不断变化的数据科学挑战。
|
18天前
|
机器学习/深度学习 算法 数据挖掘
利用机器学习优化数据中心能效的策略与实践
【5月更文挑战第13天】 在数据中心管理和运营的众多挑战中,能源效率优化是降低运营成本和减少环境影响的关键因素。本文旨在探讨如何应用机器学习技术来提高数据中心的能效,通过智能化的数据分析和资源管理达到节能的目的。与传统的摘要不同,本文将直接深入探讨所采用的技术手段、实施步骤以及预期效果,为读者提供一种新颖的视角。
22 4
|
2天前
|
机器学习/深度学习 数据采集 前端开发
【机器学习】随机森林:深度解析与应用实践
在机器学习的广阔天地中,集成学习方法因其卓越的预测能力和泛化性能而备受青睐。其中,随机森林(Random Forest)作为集成学习的一个重要分支,凭借其简单、高效且易于实现的特性,在分类和回归任务中展现了非凡的表现。本文将深入探讨随机森林的基本原理、核心构建模块、关键参数调优以及在实际应用中的策略与案例分析,旨在为读者提供一个全面而深入的理解。
16 2
|
2天前
|
机器学习/深度学习 数据采集 人工智能
掌握机器学习:从基础到实践
【5月更文挑战第31天】本文将深入探讨机器学习的奥秘,从其基本概念和原理出发,逐步引导读者理解并掌握这一技术。我们将通过实例演示如何应用机器学习解决实际问题,使读者能够将理论知识转化为实践技能。无论你是初学者还是有经验的开发者,本文都将为你提供有价值的见解和技巧。
|
2天前
|
机器学习/深度学习 算法 Cloud Native
利用机器学习进行情感分析:从理论到实践云原生技术在现代软件开发中的应用与挑战
【5月更文挑战第31天】本文旨在深入探讨机器学习在情感分析领域的应用。首先,我们将解释什么是情感分析以及为什么它在今天的世界中如此重要。然后,我们将详细介绍几种主要的机器学习算法,包括决策树、随机森林和神经网络,以及它们如何被用于情感分析。最后,我们将通过一个实际的案例研究来展示这些理论在实践中的应用。
|
4天前
|
机器学习/深度学习 数据采集 算法
构建高效机器学习模型的策略与实践
【5月更文挑战第29天】 在数据驱动的时代,机器学习模型已成为解决复杂问题的关键工具。本文旨在探讨如何构建一个高效的机器学习模型,包括数据处理、算法选择、模型训练和评估等关键步骤。我们将通过实例展示如何应用这些策略来优化模型性能,并讨论在实际应用中可能遇到的挑战和解决方案。
|
5天前
|
机器学习/深度学习 数据采集 监控
构建高效机器学习模型的策略与实践
【5月更文挑战第28天】 在数据驱动的时代,机器学习(ML)作为一项核心技术,其应用范围日益广泛。然而,构建一个既高效又准确的机器学习模型并非易事。本文将探讨一系列策略和最佳实践,旨在帮助读者理解如何从数据处理到模型部署的整个过程中提高模型的性能和效率。我们将重点讨论特征工程的重要性、选择合适的算法、调参技巧以及模型评估方法。文章的目标是为从业者提供一套实用的指南,以便在面对各种实际问题时能够构建出更加健壮的机器学习系统。
|
5天前
|
机器学习/深度学习 自然语言处理 TensorFlow
构建高效的机器学习模型:基于Python和TensorFlow的实践
构建高效的机器学习模型:基于Python和TensorFlow的实践
24 0
|
6天前
|
机器学习/深度学习 数据采集 人工智能
构建高效机器学习模型的策略与实践
【5月更文挑战第27天】 在数据驱动的时代,机器学习模型的性能直接关联到信息解析的深度和广度。本文将探讨如何构建一个高效的机器学习模型,从数据预处理、特征选择、模型选择、训练策略到最终的模型评估与部署。我们将重点讨论模型训练过程中的优化技巧,包括正则化方法、超参数调整以及集成学习的应用。此外,文章还将涉及最新的深度学习技术对传统机器学习模型的增强作用。通过这些策略的实施,读者可以提升其机器学习项目的效率和准确度。
|
6天前
|
机器学习/深度学习 敏捷开发 测试技术
深入理解自动化测试:框架选择与实践挑战利用机器学习技术优化数据中心冷却系统
【5月更文挑战第27天】 在现代软件开发周期中,自动化测试已成为确保产品质量和加快市场投放的关键步骤。本文深入探讨了自动化测试的框架选择问题,并剖析了实施过程中面临的挑战及其解决方案。通过比较不同测试框架的特点,我们旨在为读者提供一套明确的指导原则,帮助他们根据项目需求做出恰当的技术决策。同时,文中还分享了实际案例和最佳实践,以期帮助开发团队克服实施自动化测试时可能遇到的障碍。

热门文章

最新文章

相关产品

  • 人工智能平台 PAI