为环境可持续性优化生成式人工智能工作负载

优化生成式人工智能工作负载

生成式人工智能(AI)的采用正迅速扩展,覆盖越来越多的行业和全球用户。随着生成式AI模型的复杂性和规模不断增加,努力减少其对环境的影响至关重要。这需要持续努力,以减少能源消耗并提高效率,从而最大限度地利用资源,并尽量减少所需的总资源。

为了进一步优化在AWS上的深度学习工作负载的可持续性,本文提供了针对生成式AI工作负载的特定建议。具体而言,我们提供了不同定制化场景的实用最佳实践,包括从头开始训练模型、使用全数据或参数高效技术进行微调、检索增强生成(RAG)和提示工程。尽管本文主要关注大型语言模型(LLM),但我们相信大部分建议可以扩展到其他基础模型。

生成式AI问题框架

在构建生成式AI问题时,请考虑以下几点:

  • 将生成式AI的使用与可持续发展目标对齐 – 在确定项目范围时,请确保考虑可持续性:
    • 生成式AI解决方案与资源消耗较少的传统方法之间有哪些权衡?
    • 你的生成式AI项目如何支持可持续创新?
  • 使用低碳强度能源 – 在法规和法律允许的情况下,将模型训练和部署在19个AWS区域之一,这些区域在2022年消耗的电力来自100%可再生能源,或者选择具有较低碳排放强度的区域。了解更多详情,请参阅基于可持续性目标选择工作负载的区域。在选择区域时,尽量减少网络数据传输:将模型训练放在数据附近,将模型部署在用户附近。
  • 使用托管服务 – 根据您的专业知识和具体用例,权衡选择使用Amazon Bedrock或Amazon SageMaker进行托管基础架构,以使用多样化的基础模型API,或者使用完全托管的基础设施部署您的模型。使用托管服务可以帮助您更高效地运营,将维护高利用率和部署硬件的可持续优化责任转移给AWS。
  • 定义正确的定制化策略 – 有多种策略可以增强模型的能力,从提示工程到完全微调。根据您的具体需求选择最合适的策略,同时考虑每种策略所需的资源差异。例如,与提示工程相比,微调可能能够实现更高的准确性,但在训练阶段消耗更多的资源和能源。进行权衡:通过选择优先考虑可接受性能而非最佳性能的定制化方法,可以实现模型资源的减少。下图总结了LLMs定制化策略的环境影响。

模型定制化

在本节中,我们分享了模型定制化的最佳实践。

基础模型选择

选择适当的基础模型是定制生成式AI工作负载的关键步骤,可以帮助减少对全面微调和相关资源使用的需求。考虑以下因素:

  • 评估能力和限制 – 使用Amazon SageMaker JumpStart或Amazon Bedrock的游乐场轻松测试LLMs的能力,并评估它们的核心限制。
  • 减少定制化需求 – 确保通过使用公共资源(如开放LLMs排行榜、整体评估基准或模型卡片)收集信息,以比较不同的LLMs,并了解它们在哪些特定领域、任务和语言上进行了预训练。根据您的用例,考虑领域特定或多语言模型,以减少对额外定制化的需求。
  • 从小模型尺寸和小上下文窗口开始 – 大型模型尺寸和上下文窗口(可以容纳单个提示中的令牌数量)可以提供更好的性能和功能,但也需要更多的能源和资源进行推断。在扩展到更大模型之前,考虑具有较小尺寸和上下文窗口版本的模型。专门的较小模型将其能力集中在特定目标任务上。在这些任务上,专门的模型在行为上与较大模型(例如具有1750亿参数的GPT3.5)在质量上相似,同时需要更少的训练和推断资源。此类模型的示例包括Alpaca(70亿参数)或使用T5变体进行多步骤数学推理(110亿参数或更多)。

提示工程

有效的提示工程可以提高生成式AI模型的性能和效率。通过精心设计的提示,您可以引导模型的行为,减少不必要的迭代和资源需求。请考虑以下准则:

  • 保持提示简洁,避免不必要的细节 – 较长的提示会导致标记数量增加。随着标记数量的增加,模型消耗更多的内存和计算资源。考虑使用零样本学习或少样本学习,使模型能够通过仅学习少量示例快速适应。
  • 逐渐尝试不同的提示 – 根据期望的输出,逐步改进提示,直到达到期望的结果。根据任务的不同,可以尝试自一致性、生成的知识提示、ReAct提示或自动提示工程等高级技术,进一步提升模型的能力。
  • 使用可复现的提示 – 使用诸如LangChain提示模板之类的模板,您可以将提示历史保存或加载为文件。这样可以增强提示实验的跟踪、版本控制和重用性。当您知道每个模型产生最佳答案的提示时,可以减少用于提示迭代和不同项目中冗余实验的计算资源。

检索增强生成

检索增强生成(RAG)是一种通过从预定义数据集中检索和整合相关外部信息的高效方法,以增强模型能力。由于现有的LLM被直接使用,这种策略避免了在新数据上训练模型或从头构建新模型所需的能源和资源。使用Amazon Kendra或Amazon OpenSearch Service和LangChain等工具,成功构建基于RAG的解决方案,配合使用Amazon Bedrock或SageMaker JumpStart。

参数高效微调

参数高效微调(PEFT)是生成式AI中可持续性的基本方面。它旨在通过仅微调少量可训练参数来实现与微调相当的性能。通过仅微调预训练LLM的少量模型参数并冻结大部分参数,可以减少计算资源和能源消耗。

使用Parameter-Efficient Fine-Tuning库等公共库来实现常见的PEFT技术,例如低秩适应(LoRa)、前缀微调、提示微调或P-Tuning。例如,研究表明,使用LoRa可以减少可训练参数的数量高达10,000倍,GPU内存需求降低3倍,具体取决于模型的大小,而性能相似或更好。

微调

使用额外数据对整个预训练模型进行微调。这种方法可能会实现更高的性能,但比PEFT更加资源密集。在可用数据与预训练数据明显不同的情况下使用此策略。

通过选择正确的微调方法,您可以最大限度地重用模型,并避免为每个用例微调多个模型所需的资源使用。例如,如果您预计在组织内的特定领域或业务单元内重用模型,可以选择域适应。另一方面,基于指令的微调更适用于跨多个任务的常规使用。

从头训练模型

在某些情况下,可能需要从头训练LLM模型。然而,这种方法在计算上是昂贵且耗能的。为了确保最佳的训练效果,请考虑以下最佳实践:

  • 使用高效硅 – 基于AWS Trainium的EC2 Trn1实例专为高性能深度学习模型训练而构建,并针对能源效率进行了优化。在2022年,我们观察到在Trainium上训练模型可帮助您将能源消耗降低高达29%,相比可比较的实例。
  • 使用高质量数据和可扩展的数据整理 – 使用SageMaker Training来提高训练数据集的质量,并尽量减少对大量数据的依赖。通过在多样、全面和策划良好的数据集上训练,LLMs可以产生更精确的响应,并通过减少存储和计算需求实现成本和能源优化。
  • 使用分布式训练 – 使用SageMaker分布式库,如数据并行、管道并行或张量并行,在多个GPU或实例上进行并行计算。这些方法通过将训练批次分割为较小的微批次,帮助最大化GPU利用率。较小的微批次以高效的管道方式输入到GPU中,以保持所有GPU设备同时活动,从而实现资源优化。

模型推理和部署

考虑以下模型推理和部署的最佳实践:

  • 使用深度学习容器进行大型模型推理 – 您可以在SageMaker和开源框架(如DeepSpeed、Hugging Face Accelerate和FasterTransformer)上使用深度学习容器来实现权重修剪、蒸馏、压缩、量化或编译等技术。这些技术可以减小模型大小并优化内存使用。
  • 设置适当的推理模型参数 – 在推理过程中,您可以灵活调整某些影响模型输出的参数。了解并适当设置这些参数可以使您从模型中获得最相关的响应,并最小化提示调整的迭代次数。这最终会减少内存使用和能源消耗。需要考虑的关键参数包括temperaturetop_ptop_kmax_length
  • 采用高效的推理基础设施 – 您可以将模型部署在AWS Inferentia2加速器上。Inf2实例相比可比的Amazon Elastic Compute Cloud(Amazon EC2)实例具有更高的性能/功耗比,因为底层的AWS Inferentia2加速器专为大规模运行深度学习模型而构建。作为在Amazon EC2上部署超大模型的最节能选项,Inf2实例可帮助您实现部署生成式人工智能的最新创新时的可持续目标。
  • 将推理服务水平协议(SLA)与可持续目标对齐 – 定义支持您的可持续目标并满足业务需求的SLA。定义以满足您的业务需求为前提的SLA,而不是超过它们。进行明显减少资源使用以换取服务水平可接受的降低的权衡:
    • 排队处理传入请求 – 如果您的用户可以容忍一些延迟,将您的模型部署在异步端点上以减少任务之间处于空闲状态的资源,并减小负载峰值的影响。这将在没有要处理的请求时自动将实例计数缩小为零,因此只有在端点处理请求时才维护推理基础设施。
    • 调整可用性 – 如果您的用户可以容忍在罕见的故障转移情况下的一些延迟,请不要提供额外的容量。如果发生故障或实例发生故障,SageMaker将自动尝试将您的实例分布在可用区中。
    • 调整响应时间 – 当您不需要实时推理时,请使用SageMaker批量转换。与持久端点不同,批量转换作业完成后,集群将被取消,因此您不需要持续维护推理基础设施。

资源使用监控和优化

实施改进过程以跟踪您的优化工作随时间的影响。您的改进目标是使用您提供的所有资源,并以最少的资源完成相同的工作。为了使这个过程实施化,收集有关云资源利用情况的指标。这些指标与业务指标相结合,可用作您的碳排放的代理指标。

要始终监视您的环境,您可以使用Amazon CloudWatch监视系统指标,如CPU、GPU或内存利用率。如果您使用NVIDIA GPU,请考虑使用NVIDIA系统管理接口(nvidia-smi)监视GPU利用率和性能状态。对于Trainium和AWS Inferentia加速器,您可以使用AWS Neuron Monitor监视系统指标。此外,考虑使用SageMaker Profiler,它提供了对在SageMaker上训练深度学习模型期间配置的AWS计算资源的详细视图。以下是一些值得监视的关键指标:

  • CloudWatch中的CPUUtilizationGPUUtilizationGPUMemoryUtilizationMemoryUtilizationDiskUtilization
  • nvidia-smi日志中的nvidia_smi.gpu_utilizationnvidia_smi.gpu_memory_utilizationnvidia_smi.gpu_performance_state
  • Neuron Monitor中的vcpu_usagememory_infoneuroncore_utilization

结论

随着生成式人工智能模型越来越大,考虑我们工作负载的环境影响变得至关重要。

在本文中,我们提供了关于在AWS上运行生成式人工智能工作负载所需的计算、存储和网络资源的优化指南,同时最小化它们的环境影响。由于生成式人工智能领域不断发展,及时了解最新的课程、研究和工具可以帮助您找到优化工作负载以实现可持续性的新方法。