Gradient 借助 AWS Inferentia 使 LLM 基准测试变得经济高效、轻松自如 |亚马逊网络服务

Gradient 借助 AWS Inferentia 使 LLM 基准测试变得经济高效、轻松自如 |亚马逊网络服务

这是与 Gradient 的 Michael Feil 共同撰写的客座文章。

评估大型语言模型(LLM)的性能是部署前预训练和微调过程的重要步骤。验证性能的速度越快、越频繁,提高模型性能的机会就越大。

At 梯度,我们致力于定制法学硕士开发,最近刚刚推出了我们的 人工智能开发实验室,为企业组织提供个性化、端到端的开发服务,以构建私人、定制的法学硕士和人工智能(AI)副驾驶。作为此过程的一部分,我们定期根据开放和专有基准评估我们模型的性能(调整、训练和开放)。在与 AWS 团队合作训练我们的模型时 AWS 培训,我们意识到,当涉及到 LLM 评估的主流工具时,我们受到 VRAM 和 GPU 实例可用性的限制, LM 评估工具。这个开源框架可让您在各种评估任务和基准测试中对不同的生成语言模型进行评分。它被排行榜使用,例如 拥抱脸 用于公共基准测试。

为了克服这些挑战,我们决定构建并开源我们的解决方案——集成 AWS 神经元,后面的图书馆 AWS 推理 和培训班,进入 lm-evaluation-harness。这种集成使得基准测试成为可能 v-alpha-tross,Albatross 模型的早期版本,在训练过程中和之后与其他公共模型进行比较。

对于上下文,此集成作为 lm-evaluation-harness 中的新模型类运行,抽象标记的推理和序列的对数似然估计,而不影响实际的评估任务。决定将我们的内部测试流程转移到 亚马逊弹性计算云 (Amazon EC2) Inf2实例 (由 AWS Inferentia2 提供支持)使我们能够访问高达 384 GB 的共享加速器内存,轻松适应我们当前的所有公共架构。通过使用 AWS Spot 实例,我们能够利用 AWS 云中未使用的 EC2 容量,与按需价格相比,成本节省高达 90%。这最大限度地减少了测试时间,并允许我们更频繁地进行测试,因为我们能够跨多个可用的实例进行测试,并在完成后释放这些实例。

在这篇文章中,我们详细介绍了我们的测试、遇到的挑战以及在 AWS Inferentia 上使用测试工具的示例。

AWS Inferentia2 上的基准测试

该项目的目标是生成相同的分数,如图所示 打开 LLM 排行榜 (适用于 Hugging Face 上提供的许多 CausalLM 模型),同时保留根据私人基准运行它的灵活性。要查看可用模型的更多示例,请参阅 AWS Inferentia 和 Trainium 在拥抱的脸上。

将模型从 Hugging Face 转换器移植到 Hugging Face 所需的代码更改 最优神经元 Python 库相当低。因为 lm-evaluation-harness 使用 AutoModelForCausalLM,使用替换率下降 NeuronModelForCausalLM。如果没有预编译模型,模型会立即自动编译,这可能会增加作业时间 15-60 分钟。这使我们能够灵活地为任何 AWS Inferentia2 实例和支持的 CausalLM 模型部署测试。

成果

由于基准测试和模型的工作方式,我们并不期望不同运行中的分数完全匹配。然而,根据标准差,它们应该非常接近,我们一直看到这一点,如下表所示。我们在 AWS Inferentia2 上运行的初始基准测试均得到了 Hugging Face 排行榜的证实。

In lm-evaluation-harness,不同的测试使用两个主要的流: generate_untilloglikelihood。 gsm8k测试主要使用 generate_until 就像在推理过程中一样生成响应。 Loglikelihood 主要用于基准测试和测试,并检查产生不同输出的概率。两者都在 Neuron 中工作,但是 loglikelihood SDK 2.16 中的方法使用额外的步骤来确定概率,并且可能需要额外的时间。

Lm-评估-线束结果
硬件配置 原创系统 AWS Inferentia inf2.48xlarge
batch_size=1 在 gsm7k 上评估 Mistralai/Mistral-0.1B-Instruct-v8 的时间 103分钟 32分钟
gsm8k 得分(获取答案 – 与 std 精确匹配) 0.3813 – 0.3874(±0.0134) 0.3806 – 0.3844(±0.0134)

Neuron 和 lm-evaluation-harness 入门

本节中的代码可以帮助您使用 lm-evaluation-harness 并针对 Hugging Face 上支持的模型运行它。要查看一些可用型号,请访问 AWS Inferentia 和 Trainium 在拥抱的脸上。

如果您熟悉在 AWS Inferentia2 上运行模型,您可能会注意到没有 num_cores 传入的设置。我们的代码检测有多少核心可用,并自动将该数字作为参数传入。这使您可以使用相同的代码运行测试,无论您使用的实例大小如何。您可能还注意到,我们引用的是原始模型,而不是 Neuron 编译的版本。线束会根据需要自动为您编译模型。

以下步骤向您展示如何部署渐变 gradientai/v-alpha-tross 我们测试的模型。如果您想在较小的实例上测试较小的示例,您可以使用 mistralai/Mistral-7B-v0.1 模型。

  1. 运行按需 Inf 实例的默认配额为 0,因此您应该通过服务配额请求增加配额。为所有 Inf Spot 实例请求添加另一个请求,以便您可以使用 Spot 实例进行测试。对于此使用 inf192xlarge 实例的示例,您需要 2.48 个 vCPU 的配额,或者对于基本 inf4.xlarge 需要 2 个 vCPU 的配额(如果您要部署 Mistral 模型)。配额是特定于 AWS 区域的,因此请确保您的请求是在 us-east-1 or us-west-2.
  2. 根据您的模型决定您的实例。因为 v-alpha-tross 由于是70B架构,我们决定使用inf2.48xlarge实例。部署 inf2.xlarge(适用于 7B Mistral 型号)。如果您正在测试不同的模型,您可能需要根据模型的大小调整实例。
  3. 使用以下方式部署实例 抱脸DLAMI版本20240123,以便安装所有必需的驱动程序。 (显示的价格包括实例成本,没有额外的软件费用。)
  4. 将驱动器大小调整为 600 GB(Mistral 100B 为 7 GB)。
  5. 克隆并安装 lm-evaluation-harness 在实例上。我们指定一个构建,以便我们知道任何差异都是由于模型更改而不是测试或代码更改引起的。
git clone https://github.com/EleutherAI/lm-evaluation-harness
cd lm-evaluation-harness
# optional: pick specific revision from the main branch version to reproduce the exact results
git checkout 756eeb6f0aee59fc624c81dcb0e334c1263d80e3
# install the repository without overwriting the existing torch and torch-neuronx installation
pip install --no-deps -e . 
pip install peft evaluate jsonlines numexpr pybind11 pytablewriter rouge-score sacrebleu sqlitedict tqdm-multiprocess zstandard hf_transfer

  1. 运行 lm_eval 使用 hf-neuron 模型类型,并确保您有返回 Hugging Face 上模型的路径的链接:
# e.g use mistralai/Mistral-7B-v0.1 if you are on inf2.xlarge
MODEL_ID=gradientai/v-alpha-tross

python -m lm_eval --model "neuronx" --model_args "pretrained=$MODEL_ID,dtype=bfloat16" --batch_size 1 --tasks gsm8k

如果您使用 Mistral 运行前面的示例,您应该会收到以下输出(在较小的 inf2.xlarge 上,运行可能需要 250 分钟):

███████████████████████| 1319/1319 [32:52<00:00,  1.50s/it]
neuronx (pretrained=mistralai/Mistral-7B-v0.1,dtype=bfloat16), gen_kwargs: (None), limit: None, num_fewshot: None, batch_size: 1
|Tasks|Version|  Filter  |n-shot|  Metric   |Value |   |Stderr|
|-----|------:|----------|-----:|-----------|-----:|---|-----:|
|gsm8k|      2|get-answer|     5|exact_match|0.3806|±  |0.0134|

清理

完成后,请务必通过 Amazon EC2 控制台停止 EC2 实例。

结论

Gradient 和 Neuron 团队很高兴看到此版本中 LLM 评估得到更广泛的采用。亲自尝试并在 AWS Inferentia2 实例上运行最流行的评估框架。现在,当您使用 AWS Inferentia2 时,您可以受益于 AWS InferentiaXNUMX 的按需可用性 Gradient 的定制 LLM 开发。开始使用这些在 AWS Inferentia 上托管模型 教程.


作者简介

Gradient 借助 AWS Inferentia 使 LLM 基准测试变得经济高效、轻松自如 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。迈克尔·菲尔 是 Gradient 的 AI 工程师,此前曾担任 Rodhe & Schwarz 的 ML 工程师以及 Max-Plank 智能系统研究所和 Bosch Rexroth 的研究员。 Michael 是法学硕士各种开源推理库和 StarCoder 等开源项目的主要贡献者。 Michael 拥有 KIT 机电一体化和 IT 学士学位以及慕尼黑工业大学机器人学硕士学位。

Gradient 借助 AWS Inferentia 使 LLM 基准测试变得经济高效、轻松自如 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。吉姆·伯托夫特 是 AWS 的高级初创公司解决方案架构师,直接与 Gradient 等初创公司合作。 Jim 是 CISSP、AWS AI/ML 技术领域社区的成员、Neuron 大使,并与开源社区合作以支持 Inferentia 和 Trainium 的使用。 Jim 拥有卡内基梅隆大学数学学士学位和弗吉尼亚大学经济学硕士学位。

时间戳记:

更多来自 AWS机器学习