编者按:欢迎阅读“科研上新”栏目!“科研上新”汇聚了微软亚洲研究院最新的创新成果与科研动态。在这里,你可以快速浏览研究院的亮点资讯,保持对前沿领域的敏锐嗅觉,同时也能找到先进实用的开源工具。
深度学习作业低GPU利用率问题的实证研究(ICSE 2024)
近年来,深度学习在诸多领域取得了显著成就,并在各种智能软件应用中扮演重要角色。为了更好地进行深度学习训练和测试,IT 企业构建了深度学习平台并在平台上配备了大量的 GPU。在微软公司内部,每天都有数百名开发者在深度学习生产平台–Platform-X 上执行训练和测试作业。GPU 的利用率是衡量作业运行时性能和效率的关键指标。低 GPU 利用率作业不仅会导致资源浪费,还会显著降低生产力。
图1简要说明了 Platform-X 的工作流程。用户指定作业的资源配额、镜像、启动脚本等配置。调度程序会使用群调度算法调度作业和分配资源,并在一个或多个 GPU 计算节点上实例化容器。典型的深度学习作业的生命周期通常分为以下四个阶段:初始化、数据预处理、模型训练、模型验证。
深度学习已成为现代软件应用程序的基本组成部分,且云平台逐渐作为训练和部署模型主要基础设施。了解深度学习作业中低 GPU 利用率的原因并寻求解决方案至关重要,其有助于揭示深度学习领域中独特的软件工程挑战,并指导开发高质量、低成本的软件解决方案。
微软亚洲研究院的研究员们和微软 Azure 云平台部门的工程师们合作,对微软内部深度学习生产平台 Platform-X 上作业低利用率问题进行了深入的综合实证研究。研究员们分析了400个真实的低利用率作业(候选作业综合 GPU 利用率小于或等于50%),并在样本作业中发现了706个低利用率问题,其中大部分问题都归因于脚本或程序中的代码逻辑问题。研究员们还进一步调查了这些问题的常见根本原因(共四大类,十五个子类),并提出了相应的修复建议。
研究的主要发现包括:
(1)深度学习作业的低 GPU 利用率源于不充足的 GPU 计算以及非 GPU 任务引起的中断。
(2)大约一半(46.03%)的问题归因于各种数据操作。例如主存和 GPU 显存之间的低效数据传输(27.90%),分布式训练中 GPU 之间的持续数据交换(7.08%),数据预处理(3.97%)等。可采用异步读取、减少通信频次、异步上传数据、将数据处理分离到数据处理任务、流水线读取等方式快速修复相应问题。
(3)45.18%的问题与深度学习模型相关,并在模型训练和测试阶段就暴露出来了。例如,使用不合适的批尺寸大小(25.64%),可通过在保证 GPU 显存不溢出的前提下调整批尺寸来解决;执行低效的模型检查点操作(16.43%),可采用异步执行的方式进行修复,让 GPU 和 I/O 设备并行工作;GPU 显存不足造成无法支持更大规模的 GPU 计算(3.12%),可通过申请更多计算资源或者采用合理的数据放置策略,以及时换出冷数据来解决。
(4)一部分低利用率问题是由不合适的作业类型或配置(4.82%)及依赖库和框架错误使用问题(3.97%)引起的。例如,用户交互式地操作 GPU(2.12%);有些用户超额申请 GPU(0.85%),造成 GPU 部分闲置;一些用户提交了本不需要使用 GPU 的数据处理任务(0.57%);还有些用户的程序违反了系统和上下文约定,造成 API 误用(2.27%),从而未能充分使用 GPU 资源。
(5)大多数(84.99%)低 GPU 利用率问题可以通过少量代码或脚本的修改来解决。因此,研究员们设计了实用性强且易于实现和验证的修复方法,用户可以快速改进作业、提升 GPU 利用率。研究员们对 BERT 和 Swin Transformer 这两个典型作业进行了修复,实验结果显示它们分别取得了高达7.52倍和3.95倍的性能提升。
基于以上的实证研究结果,研究员们指出了以下未来研究的可能方向:
- 工具支持:GPU 利用率的预估和预测、代码检查工具、高效模型检查点。
- 平台提升:异构流水线、GPU 共享、分布式数据缓存。
我们的研究为提升深度学习作业和平台的 GPU 利用率提供了宝贵的建议。通过探讨深度学习作业的开发和修复(两个方面),这项工作进一步启示了可能的研究方向和工具支持、为深度学习系统和平台的设计与管理提供了更好的指导,从而帮助系统开发工程师和算法工程师解决低利用率问题并提升开发效率。
KPDDS:通过关键点驱动的数据合成解决数学问题
论文链接:https://arxiv.org/abs/2403.02333 (opens in new tab)
尽管大语言模型(LLMs)在推理任务中表现出色,但在面对复杂的数学问题时,这些模型依然有一定的局限性。这主要是因为解决数学问题不仅要理解问题本身,还需要执行一连串的逻辑和数学操作,对模型的推理和计算能力提出了较高的要求。鉴于当前的数学问题数据集规模较小,限制了模型微调的效果,众多研究聚焦于生成更大规模的数学指令数据集。科研人员尝试对现有数据集进行改写和扩展,或是基于现有数学知识库合成全新的问题,但这些方法生成的数据在多样性和合理性方面往往不尽人意。
针对这一问题,本文引入了一种数据合成新范式——关键点驱动的数据合成(KPDDS),旨在通过理解和应用数学问题的核心概念来合成训练数据。其关键在于 KPDDS 能够从真实数据集中提取知识,并利用解题的关键点及示例来生成新问题。这种方法不仅能保证了合成数据的质量和可控性,还能够在一定程度上模拟真实数据的分布,为大语言模型的训练提供了更为丰富且准确的数据资源。
KPDDS 的第一阶段知识构建,由知识提取和主题共现概率矩阵构建两部分组成。在知识提取部分,KPDDS 使用 GPT-4 从种子问题中提取解决问题所需的关键知识,并将知识分为主题(Topic)和关键点(Key Points)两个层次。为进一步处理从种子问题中提取的知识数据,研究员们通过计算主题的 embedding 的余弦相似度进行去重和聚类,最终构建了“数学关键点及练习”(MPKP)数据集。在主题共现概率矩阵构建部分,KPDDS 从 MPKP 数据集中的数学问题主题构建了主题共现概率矩阵(TCPM),来量化数据集内主题间的共现概率,从而帮助模型更好地理解复杂的结构。
第二阶段练习合成,由问题生成与评分,和共识解答两部分组成。在问题生成与评分方面,KPDDS 根据 TCPM 执行主题的概率性采样,构建关键点-练习信息集。接着,再使用 GPT-4 基于信息集生成新问题,并通过打分量化评估来确定每个问题的质量,最后仅保留高于阈值的问题用于下一步合成。为了减少噪声数据的影响并增强答案生成过程的可靠性,KPDDS 采用了投票共识方法生成新问题的解答。研究员们在投票阶段采用了 sympy 等工具包,以确保生成答案的正确性,即使是以不同形式(如分数和小数)出现的等效答案也能被认定为相同。对共识策略进行的消融实验证明了该方法的有效性,并确定了最佳阈值以过滤数据。
此外,研究员们还构建了 KPMATH-Plus 数据集,由 KPMATH-M (252K)、KPMATH-G (613K) 和 MixMath (711K) 三部分组成,共包含1,576K个样本,涵盖了丰富多样的数学问题。
研究员们使用 KPMath-Plus 数据集对 Mistral-7b、DeepSeekMath-7b、Llama-2-13b、Llemma-34b 模型进行微调,均带来显著提升。KPMath-Plus-DeepSeekMath 在六个常用的数学评估数据集上获得了最佳性能,超越了7B至70B范围内的其他模型。值得注意的是,在匈牙利考试中,KPMath-Plus-Mistral-7B 的成绩仅次于 GPT-4 和 Grok-1,与其他微调模型相比,在匈牙利考试和 GSM8K 测试中展现出了均衡的性能。这证明了 KPMath-Plus 数据集的有效性,它不仅能够通过微调提升模型性能,也能确保模型解题能力的广泛适用性。
KPDDS 提供了一种数据合成的新范式来增强 LLMs 处理数学问题的能力,这是在探索复杂推理问题方面的初步尝试。未来,微软亚洲研究院研究员们的研究视野将不仅局限于数学,还会扩展到更广泛的学科中,通过利用跨学科知识,引入更丰富和复杂的理论与概念,生成高质量的训练数据,进一步提高模型的推理和解题能力。
MathScale:大规模合成数学推理的指令微调数据
论文链接:https://arxiv.org/abs/2403.02884 (opens in new tab)
GitHub链接:https://github.com/microsoft/unilm/tree/master/mathscale (opens in new tab)
指令微调(instruction tuning)是一种有效提高大语言模型(LLMs)某些能力的方式,但目前能够用于提高数学推理的高质量指令微调数据十分有限(如 GSM8K 和 MATH)。因此,能够大规模合成高质量的数学推理指令微调数据对于提高 LLMs 的数学能力非常重要。
现有的合成数学推理数据的方法主要是对已有数据集进行数据扩展(data argumentation)。这些方法产生的数学推理数据会和已有的数据集非常相似,因此难以扩展到更大规模。对此,微软亚洲研究院的研究员们提出了 MathScale 方法,流程如图3所示。具体来说,首先利用 frontier LLM(如GPT-3.5)从已有的种子数学问题提取 high level 的概念(即主题和知识点)。然后,MathScale 利用已经提取的主题和知识点建立一个概念图。这个概念图中的边的权重是通过主题与主题、主题与知识点或者知识点与知识点之间的共现信息得到的。接下来,通过在建立的概念图上进行随机游走,采样出主题和知识点的组合,并再次利用 GPT-3.5 基于采样出的主题及知识点生成新的问题和答案。在概念图上的随机游走算法可以创造出多样的主题和知识点组合,从而保证生成数学推理数据的多样性。
本研究用 MathScale 方法生成了两百万的数学指令数据集(即MathScaleQA)。研究员们用 MathScaleQA 微调了 Mistral-7B,Llama2-7B 及 Llama2-13B,得到的模型在数学能力上超越已有方法(在 MWPBench 的十个数据集上的实验结果见表2)。
研究员们在该研究中观察到,采用 MathScale 方法生成的数据集展现出了很好的 Scaling 特性。具体来说,随着生成训练数据量的增加,模型在 MWPBench 的十个评测集上的表现呈现出近似对数增长的趋势。
该特性为未来进行更大规模的数据生成以及使用更强 frontier LLM(如GPT-4)进行数据生成提供了基础。
RecAI:大模型改进推荐系统的五种方式
论文链接:https://arxiv.org/abs/2403.06465 (opens in new tab)
项目链接:https://github.com/microsoft/recai (opens in new tab)
推荐系统会基于用户行为来推测其偏好,从而实现内容的精准推送,但现有的主流推荐算法对于用户而言通常是被动的,且面临诸多挑战,如可交互性、可解释性、可控性等。大语言模型的诞生为解决这些挑战带来了全新的机遇。因此,大模型与推荐系统的结合成为了业界炙手可热的话题。
微软亚洲研究院的研究员们在 RecAI 一文中总结了其该领域的一系列探索,并开源了相关项目。该系列工作将于2024年5月在新加坡举办的 WebConf’24 大会上展示。
如下是研究员们在本文中梳理并开源的大模型改进推荐系统的五种方式:
1. Recommender AI Agent。鉴于大模型在时效性和领域知识方面的不足,工具增强的智能体成为了大模型落地领域应用的最经典范式之一。传统的推荐模型被视为领域内定制的工具,而大模型则扮演了大脑中枢的角色,负责与用户对话,理解用户意图,并通过调用其他工具来完成复杂的查询和推荐任务。为了更加准确、高效地完成大模型和传统推荐模型的协作,研究员们改进了智能体框架中的任务规划、记忆和工具学习的机制。
2. Generative RecLM。智能体的主要不足在于反应迟缓,无法实现流式回应。这在许多对响应速度敏感的推荐场景中尤为突出。因此,微调大语言模型,使其自身掌握领域知识,理解用户的复杂、动态指令,成为提升其性能的必经之路。为此,研究员们设计了一套结合有监督学习(SFT)和强化学习(RL)的两阶段学习方法,不仅提升了大模型响应用户指令的能力,还能减少大模型的输出错误。
3. Embedding-oriented RecLM。基于嵌入的匹配范式,无论是在推荐系统还是搜索引擎,都发挥着巨大的作用。语言模型的成熟使得任何形式的文本都能转化为有效的嵌入表征,例如用户输入的查询、用户的隐式行为序列、用户和智能体的对话历史等。根据通用的文本匹配模型,研究员们设计了10类任务,专门激发模型在物品匹配方面的能力,以便统一搜索和推荐召回、为排序任务提供特征,以及在智能体框架中作为基于自然语言输入的推荐工具。
4. Knowledge Plugin。在很多实际场景中,例如仅有 API 服务的情况下,大语言模型是不能进行修改的。在提示词中加入必要的背景知识,例如商品的描述,相似用户的行为模式等,是一种有效且常用的补充领域知识的手段。尽管现在许多技术能支持长序列建模,例如 GPT-4-turbo 可以支持128k的长文本输入,但它们还是无法直接处理推荐系统的海量用户日志。于是,研究员们设计了一套方法,通过精简用户行为和商品图谱数据,用最经济的途径为大语言模型提供领域知识。
5. RecExplainer。深度推荐模型往往是黑盒模型,缺乏可解释性。鉴于大语言模型有强大的语言表达和逻辑推理能力,又蕴含了广泛的世界知识,科研人员是否能够让它不仅能读懂文字,也能读懂深度学习模型?再结合它自身的强大智能,是否能打造一个优秀的(小)神经模型解释器?为此,研究员们将神经元状态视为不同于文本、图像等的一种新型数据模态,设计了三种对齐方法,尝试教会大语言模型感知这种模态,并且取得了极具潜力的成果。这种新的模型解释器的优势在于,它不仅能用自然语言描述解释内容,还能与用户互动,允许用户控制模型朝所需方向生成解释。