0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在CPU上优化ChatGLM-6B?一行代码就行 | 最“in”大模型

英特尔中国 来源:未知 2023-08-11 19:15 次阅读

大语言模型的应用
与微调优化必要性

ChatGPT 的横空出世开启了大语言模型 (LLM) 的普及元年,BERT、GPT-4、ChatGLM 等模型的非凡能力则展现出类似通用人工智能 (AI) 的巨大潜力,也因此得到了多行业、多领域的广泛关注。

为加速这些大模型与特定领域的深度融合,以及更好地适应特定任务,基于任务特性对这些模型进行定制化微调至关重要。

然而,它们庞大的参数使得用传统方式对大模型进行调优面临诸多挑战,不仅要求相关人员熟练掌握微调技巧,还需要付出巨大的训练成本。

近年来,出现了参数高效微调 (Parameter-Efficient Fine-Tuning, PEFT)和提示微调 (Prompt-tuning)技术。这些技术因其成本更低、应用方式更简单便捷,正在逐渐取代大模型传统调优方法。

本文结合目前在中文应用场景中具有出色表现的开源预训练大模型 ChatGLM-6B,介绍如何通过对其开源 Prompt-tuning 代码进行极少量的修改,并结合第四代英特尔至强可扩展处理器[1]的全新内置 AI加速引擎——英特尔高级矩阵扩展 (IntelAdvancedMatrix Extension,简称英特尔AMX)及配套的软件工具,来实现高效、低成本的大模型微调。

基于英特尔 架构硬件
微调优化方案

本文通过以下三个方面实现了基于第四代英特尔 至强 可扩展处理器的 ChatGLM 高效微调优化:

1.借助英特尔 AMX,大幅提升模型微调计算速度

AMX 是内置于第四代英特尔 至强 可扩展处理器中的矩阵乘法加速器,能够更快速地处理 BFloat16 (BF16) 或 INT8 数据类型的矩阵乘加运算,从而显著提升模型训练和推理的性能。

wKgZomToQm2AAUh-AAHhLhHm8Uc236.png

图 1. 英特尔 AMX 技术架构

目前,现行的 PyTorch 框架中,已经可以通过具备 BF16 自动混合精度功能自动实现对 AMX 加速器的利用。

就ChatGLM-6B而言,其开源微调代码的 autocast_smart_context_manager() 函数,也已具备对 CPU 自动混合精度的支持。

因此,只需在启动微调时加入 CPU 自动混合精度的使能参数即可直接利用英特尔 AMX 带来的优势。

wKgZomToQm2ANvIgAAM58vzYYPU986.png

图 2. 通过trainer.py 中的 autocast_smart_context_manager() 函数,在 ChatGLM-6B 开源 prompt-tuning 目录下实现对 CPU 和 GPU 的自动混合精度支持

具体方法是在启动微调的 train.sh 脚本时做如下修改:

wKgZomToQm2ATm5dAABREBIKUgc380.png

2.结合英特尔 MPI 库充分利用处理器架构特点和多核配置,发挥 CPU 的整体效率

第四代英特尔 至强 可扩展处理器最多可拥有 60 个内核。这些内核通过 4 个集群 (cluster) 的方式进行内部组织。

理论上,当多个处理器内核并行处理一个计算任务并需要共享或交换数据时,同一个集群内的内核之间的通信时延较低。

因此,在使用 PyTorch 框架进行模型微调时,我们可以将同一个集群上的内核资源分配给同一个 PyTorch 实例,从而为单个实例提供更理想的计算效率。

此外,通过利用 PyTorch 的分布式数据并行 (Distributed Data Parallel,DDP) 功能,还可将两个 CPU 上的 8 个集群的内核资源汇集在一起,充分发挥整体效率。

wKgZomToQm2ANbQ6AAs1kZxLKlM400.png

图 3. 第四代英特尔 至强 可扩展处理器的内部集群 (cluster) 架构

为实现从应用程序代码到数据通信的整体简化,PyTorch 框架支持多种分布式数据并行后端 (backend),其中 MPI 后端方式能够很好地满足我们的优化需求。

wKgZomToQm6AeOJ3AABqgv42ix4368.png

图 4. PyTorch 支持的多种分布式数据并行的后端(来源:PyTorch 官网[2]

但是,通过 pip 或 conda 来安装的预编译PyTorch 二进制包中并未将 MPI 的后端作为缺省功能编译。因此,我们需要安装 MPI 协议工具库并通过手工编译来获得对 MPI 后端的支持。

英特尔MPI[3]是一个实现 MPICH 规范的多结构消息传递库,使用该库可创建、维护和测试能够在英特尔 处理器上实现更优性能的先进和复杂的应用。它采用 OFI 来处理所有通信,能够提供更高的吞吐量、更低的时延和更简单的程序设计。

以下是基于英特尔MPI库的 PyTorch 编译步骤:

下载英特尔 MPI库并安装

wKgZomToQm6AFiXtAAEA1aykY1g455.png

安装 PyTorch 编译依赖包

wKgZomToQm6ACpszAAAlKepuiRQ309.png

下载 PyTorch 源码并完成编译、安装

wKgZomToQm6AZzXdAABqzQ2JxYA827.png

在获得了支持 MPI 后端的 PyTorch 后,只需按如下方法在 ChatGLM Prompt-tuning 目录下的 main.py 修改一行代码:

将dist.init_process_group(backend='gloo', world_size=1,rank=0) 改为:

dist.init_process_group(backend='mpi')

wKgZomToQm6ACsLBAAJ6J5WOECc618.png

图 5. 修改前的main.py

wKgZomToQm6AUvVzAAKNZ56mNmg106.png

图 6. 修改后的 main.py

3.利用至强 CPU Max 系列集成的 HBM 满足大模型微调所需的大内存带宽

基于 Transformer 的大模型,由于参数、训练数据和模型规模的复杂程度较高,因此内存复杂度通常是 O(n2)

这意味着这些大模型需要足够大的内存带宽支持才能获得更好的运行性能。

英特尔 至强 CPU Max 系列[4],配备 64 GB 的 HBM2e 高带宽内存,为在 CPU 上高效运行大模型提供了高达~1TB/s的内存带宽支持[5]

该 CPU 集成的 HBM,能够在 3 种模式下灵活配置:

HBM-Only 模式——支持内存容量需求不超过 64 GB 的工作负载,具备每核 1 至 2 GB 的内存扩展能力,无需更改代码和另购 DDR,即可启动系统。 HBM Flat 模式——可为需要大内存容量的应用提供灵活性,通过 HBM 和 DRAM 提供一个平面内存区域 (flat memory region),适用于每核内存需求 >2 GB 的工作负载。可能需要更改代码。 HBM 高速缓存模式——为内存容量 >64 GB或每核内存需求 >2GB 的工作负载提供更优性能。无需更改代码,HBM 将用作 DDR 的高速缓存。

针对 ChatGLM-6B 微调,试验结果显示:与其他两种模式相比, HBM 高速缓存模式在性能和使用方便性方面均更胜一筹。

在英特尔 至强 CPU Max 系列产品上,结合之前的两项优化,我们可以通过以下命令行启动 ChatGLM-6B 微调:

wKgZomToQm-AUmLlAAOaWcWD-Mo234.png

图 7. 在拥有 32 个物理核的英特尔 至强 CPU Max 9462 双路服务器上启动微调

优化结果

通过以上简单软、硬件综合优化,无须采用昂贵的 GPU 硬件,即可实现对 ChatGLM-6B 模型的高性能微调。

注:以上代码修改需要配合 python 工具包 accelerate 0.18.0 和 transformers 4.28.0。

作者简介:

夏磊,英特尔(中国)有限公司人工智能首席工程师,拥有近 20 年的人工智能从业经验,在软件算法、自动控制和工程管理等领域积累了丰富经验。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 英特尔
    +关注

    关注

    60

    文章

    9464

    浏览量

    169096
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10472

    浏览量

    206828

原文标题:如何在CPU上优化ChatGLM-6B?一行代码就行 | 最“in”大模型

文章出处:【微信号:英特尔中国,微信公众号:英特尔中国】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    在uCGUI的回调函数里加了代码,stm32无法启动怎么解决?

    我是个初学者。最近在写个uCGUI的小应用的时候遇到了这样的问题,我在MULTIEDIT控件的回调函数里加了一行代码,运行我自己写的
    发表于 04-24 07:06

    浅谈代码优化与过度设计

    本文记录了作者从“代码优化”到“过度设计”的典型思考过程,这过程中涉及了很多Java的语法糖及设计模式的东西,很典型,能启发思考,遂记录下来。 有一天Review师妹的代码,看到一行
    的头像 发表于 01-19 10:05 322次阅读
    浅谈<b class='flag-5'>代码</b><b class='flag-5'>优化</b>与过度设计

    三步完成在英特尔独立显卡上量化和部署ChatGLM3-6B模型

    ChatGLM3 是智谱 AI 和清华大学 KEG 实验室联合发布的新一代对话预训练模型ChatGLM3-6B 是 ChatGLM3 系列中的开源
    的头像 发表于 01-11 18:04 1036次阅读
    三步完成在英特尔独立显卡上量化和部署<b class='flag-5'>ChatGLM</b>3-6B<b class='flag-5'>模型</b>

    ChatGLM3-6B在CPU上的INT4量化和部署

    ChatGLM3 是智谱 AI 和清华大学 KEG 实验室联合发布的新一代对话预训练模型ChatGLM3-6B 是 ChatGLM3 系列中的开源
    的头像 发表于 01-05 09:36 577次阅读
    <b class='flag-5'>ChatGLM</b>3-6B在<b class='flag-5'>CPU</b>上的INT4量化和部署

    TLM4644封装上最后一行的标识有啥意义?

    TLM 4644封装上最后一行的标识有啥意义? 代表什么参数吗? 比如 N37467
    发表于 01-03 10:48

    【爱芯派 Pro 开发板试用体验】在爱芯派部署ChatGLM3(

    模型在公开 benchmark ChatGLM2-6B 模型性能接近。这创新为自然语言处理应用在移动设备
    发表于 12-17 22:54

    “行空板+大模型”——基于ChatGLM的多角色交互式聊天机器人

    随着人工智能技术的迅猛发展,大型语言模型成为了热门话题。国际上的GPT-3、BERT等模型备受关注,而国内的本土语言模型ChatGLM也引起了广泛关注。
    的头像 发表于 12-08 14:11 341次阅读

    何在COMSOL中优化合并解?

    何在COMSOL中优化合并解? 在COMSOL中,优化合并解指的是在分析中使用优化模块以找到最佳解决方案的过程中合并模拟结果。在本文中,我们将详细介绍如何实现此目标。 1. 使用多个
    的头像 发表于 10-29 11:35 586次阅读

    探索ChatGLM2在算能BM1684X上INT8量化部署,加速大模型商业落地

    1.背景介绍在2023年7月时我们已通过静态设计方案完成了ChatGLM2-6B在单颗BM1684X上的部署工作,量化模式F16,模型大小12GB,平均速度约为3token/s,详见《算丰技术揭秘
    的头像 发表于 10-10 10:18 2247次阅读
    探索<b class='flag-5'>ChatGLM</b>2在算能BM1684X上INT8量化部署,加速大<b class='flag-5'>模型</b>商业落地

    基于ChatGLM2和OpenVINO™打造中文聊天助手

    ChatGLM 是由清华大学团队开发的是一个开源的、支持中英双语的类 ChatGPT 大语言模型,它能生成相当符合人类偏好的回答, ChatGLM2 是开源中英双语对话模型
    的头像 发表于 08-24 17:13 1007次阅读
    基于<b class='flag-5'>ChatGLM</b>2和OpenVINO™打造中文聊天助手

    一个简单模型就让ChatGLM性能大幅提升 | 最“in”大模型

    引言 自大语言模型 (LLM) 成为热点话题以来,涌现了一大批中文大语言模型并在优化平台中得到了积极部署。 ChatGLM 正是广受好评的主流中文 LLM 之一。 然而,由于
    的头像 发表于 08-19 11:15 513次阅读
    一个简单<b class='flag-5'>模型</b>就让<b class='flag-5'>ChatGLM</b>性能大幅提升 | 最“in”大<b class='flag-5'>模型</b>

    下载量超300w的ChatGLM-6B再升级:8-32k上下文,推理提速42%

    基于 FlashAttention 技术,项目团队将基座模型的上下文长度(Context Length)由 ChatGLM-6B 的 2K 扩展到了 32K,并在对话阶段使用 8K 的上下文长度训练
    的头像 发表于 06-29 16:15 1011次阅读
    下载量超300w的<b class='flag-5'>ChatGLM-6B</b>再升级:8-32k上下文,推理提速42%

    ChatGLM2-6B:性能大幅提升,8-32k上下文,推理提速42%,在中文榜单位列榜首

    在主要评估LLM模型中文能力的 C-Eval 榜单中,截至6月25日 ChatGLM2 模型以 71.1 的分数位居 Rank 0 ,ChatGLM2-6B
    的头像 发表于 06-26 14:30 790次阅读
    <b class='flag-5'>ChatGLM</b>2-6B:性能大幅提升,8-32k上下文,推理提速42%,在中文榜单位列榜首

    ChatGLM-6B的局限和不足

    ;ChatGLM-6B 参考了 ChatGPT 的设计思路,在千 亿基座模型 GLM-130B 中注入了代码预训练,通过有监督微调等技术实现与人类意图对齐(即让机 器的回答符合人类的期望和价值观
    的头像 发表于 06-25 11:50 4846次阅读
    <b class='flag-5'>ChatGLM-6B</b>的局限和不足

    国内大模型争霸赛,你最看好哪家?

    而最近,中文通用大模型基准(SuperCLUE)评测公布了最新结果,GPT-4 遥遥领先,而国内成绩最好的是科大讯飞的星火认知大模型。这里面文心一言居然排在了最后一名,甚至比ChatGLM-6B的得分还低,实在难以置信。
    的头像 发表于 05-19 16:55 3630次阅读
    国内大<b class='flag-5'>模型</b>争霸赛,你最看好哪家?