大语言模型(LLMs)在 Amazon SageMaker 上的动手实践(三)

2023-11-29 16:10:44 字數 5901 閱讀 9190

本期文章,我们将通过三个动手实验从浅到深地解读和演示大语言模型(llms),如何结合 amazon sagemaker 的模型部署、模型编译优化、模型分布式训练等。

实验三:使用 amazon sagemaker 实现 bert 模型的模型并行(model parallelization)训练

该动手实验的目标是使用 amazon sagemaker 的模型并行库(model parallelism library),来实现例如 bert 这样的大语言模型的模型分布式并行训练。

模型并行性是一种训练无法容纳在单个 gpu 上的大语言模型的方法。如果你正在研究从 70 亿个参数到 1750 亿个参数不等的大语言模型,那么模型并行性就是实现这个目的的方法,这些模型太大了,不能放在单个 gpu 上。因此,我们需要一个并行策略来利用它们。使用 amazon sagemaker 的模型并行库,可以训练由于 gpu 内存限制而难以训练的大语言模型。该库可自动高效地将相应大语言模型拆分为多个 gpu 和实例。使用该库,开发者可以高效地训练具有数十亿或数万亿个参数的大语言模型,从而更快地实现目标**精度。

1. 实验环境和**结构

sagemaker 分布式模型并行 (smp) 是一个模型并行库,用于训练大语言模型,这些大语言模型以前由于 gpu 内存限制而难以训练。smp 可自动高效地将模型拆分为多个 gpu 和实例,并协调模型训练,允许你通过创建具有更多参数的更大模型来提高**精度。

此 notebook 配置 smp 使用 pytorch 1.6.0和amazon sagemaker python sdk 训练模型。

在该 notebook 中,将在 smp 中使用 bert 示例训练脚本。示例脚本基于 nvidia 深度学习示例,要求**数据集并将其上传到 amazon s3。这是一个大型数据集,因此根据你的连接速度,此过程可能需要数小时才能完成。

此 notebook 依赖于以下文件:

1. bert_example/sagemaker_smp_pretrain.py:这是一个入口点脚本,在 notebook 指令中传递给 pytorch 估算器。该脚本负责使用 smp 对 bert 模型进行端到端训练。

2. bert_example/modeling.py:这包含 bert 模型的模型定义。

3. bert_example/bert_config.json:这允许对模型进行额外配置,由 modeling.py 使用。其他配置包括 dropout 概率、pooler 和编码器大小、编码器隐藏层的数量、编码器中间层的大小等。

4. bert_example/schedulers.py:包含用于端到端训练 bert 模型 (bert_example/sagemaker_smp_pretrain.py) 的学习率调度器(learning rate schedulers)的定义。

5. bert_example/utils.py:它包含用于端到端训练 bert 模型 (bert_example/sagemaker_smp_pretrain.py) 的不同辅助实用函数。

6. bert_example/file_utils.py:包含模型定义中使用的不同文件实用程序函数 (bert_example/modeling.py)。

2. 实验准备和扩展学习资源

实验扩展学习资源:

如果你是 amazon sagemaker 的新用户,你可能会发现以下内容对进一步了解 smp 和在 pytorch 上使用amazon sagemaker 很有帮助:

有关 sagemaker 模型并行度库的更多信息,请参阅使用 sagemaker 分布式对并行分布式训练进行建模;

有关在 pytorch 上使用 sagemaker python sdk 的更多信息,请参阅如何使用pytorch和sagemaker python sdk;

了解如何使用自己的训练镜像(image)在 amazon sagemaker 中启动训练任务,请参阅使用自己的训练算法。

实验准备。您必须创建 s3 存储桶来存储用于训练大语言模型的输入数据。此存储桶必须位于您启动训练任务的同一亚马逊云科技的海外区域中。要了解如何操作,请参阅 amazon s3 文档中的创建存储桶。

您必须从 nvidia 深度学习示例中**用于训练的数据集并将其上传到您创建的 s3 存储桶。要详细了解为预处理和**数据集而提供的数据集和脚本,请参阅在 nvidia 深度学习示例存储库 readme 中获取数据。您也可以使用快速入门指南来学习如何**数据集。存储库由三个数据集组成。或者你也可以使用 wiki_only 参数来仅**维基百科数据集。

3. amazon sagemaker 的初始化

初始化 notebook 实例。获取亚马逊云科技的区域信息、sagemaker 执行角色的亚马逊资源名称 (arn)、以及使用的缺省 amazon s3 桶等信息。

import sagemaker

from sagemaker import get_execution_role

from sagemaker.estimator import estimator

from sagemaker.pytorch import pytorch

import boto3

import os

role =

get_execution_role()

# provide a pre-existing role arn as an alternative to creating a new role

print(f"sagemaker execution role:")

client = boto3.client("sts")

account = client.get_caller_identity()[account"]

print(f"aws account:")

session = boto3.session.session()

region = session.region_name

print(f"aws region:")

sagemaker_session = sagemaker.session.session(boto_session=session)

import sys

print(sys.path)

# get default bucket

default_bucket = sagemaker_session.default_bucket()

print()

print("default bucket for this session: "default_bucket)

在 amazon s3 中准备训练数据

替换以下 “none” 以设置预处理数据的 s3 存储桶和前缀。例如,如果你的训练数据在 s3://your-bucket/training 中,请设置 s3_bucket 的值为 your-bucket,设置前缀 prefix 的值为 training,作为前缀。输出数据也将存储在同一个存储桶中,位于 output/ 前缀下。s3_bucket = none # replace none by your bucket

prefix = none # replace none by the prefix of your data

如果您继续使用 s3_bucket 和 prefix 的 none 值,则程序会从公共 s3 存储桶 sagemaker-sample-files **一些模拟数据并将其上传到您的默认存储桶。

if s3_bucket is none:

# donwload some mock data from a public bucket in us-east-1

s3 = boto3.resource("s3")

bucket_name = sagemaker-sample-files"

# phase 1 pretraining

prefix = datasets/binary/bert/hdf5_lower_case_1_seq_len_128_max_pred_20_masked_lm_prob_0.15_random_seed_12345_dupe_factor_5/wikicorpus_en_abstract"

local_dir = tmp/data"

bucket = s3.bucket(bucket_name)

for obj in bucket.objects.filter(prefix=prefix):

target = os.path.join(local_dir, obj.key)

if not os.path.exists(os.path.dirname(target)):

os.makedirs(os.path.dirname(target))

bucket.download_file(obj.key, target)

# upload to default bucket

mock_data = sagemaker_session.upload_data(

path=os.path.join(local_dir, prefix),bucket=sagemaker_session.default_bucket(),key_prefix=prefix,data_channels = output/bert"

print(f"your output data will be stored in: s3://output/bert")

5. 定义 sagemaker 训练任务

接下来,你将使用 sagemaker estimator api 来定义 sagemaker 训练作业。

本例使用 pytorchestimator 来定义 amazon sagemaker 用于训练的 ec2 实例的数量和类型,以及连接到这些实例的卷的大小。

需要配置的参数包括:

实例数量。实例类型。

卷的大小。在 instance_type 和 instance_count 中指定的实例类型和实例数量,将决定 amazon sagemaker 在训练期间使用的 gpu 数量。为 instance_type 和 instance_count 指定值,这样可用于训练的 gpu 总数等于训练脚本中 smp.init 配置中的分区。

如果将 ddp 设置为 true,则必须确保可用的 gpu 总数可被分区整除。除法的结果被推断为用于 horovod(数据并行度)的大语言模型副本数量。

另外,还需要为 smp 设置参数字典并设置自定义 mpioptions。

参数字典可配置的内容包括:微批次数量、分区数量、是否将数据并行与 ddp 一起使用、流水线策略、放置策略和其他特定于 bert 的超参数。

mpi_options = verbose --mca orte_base_help_aggregate 0 "

smp_parameters =

hyperparameters = mpi":

enabled": true,processes_per_host": 8,custom_mpi_options": mpi_options,source_dir="bert_example",output_path=s3_output_location,max_run=timeout,hyperparameters=hyperparameters,最后,你将使用这个估算器启动 sagemaker 训练作业,如下**所示:

pytorch_estimator.fit(data_channels, logs=true)

本期文章,我们重点讨论了大语言模型(llms)在亚马逊云科技上的动手实践,解读和演示大语言模型(llms),如何结合 amazon sagemaker 的模型部署、模型编译优化、模型分布式训练等方面的一些实际例子及实现**,希望这些例子和实现**对于正在探索大语言模型精彩世界的你,会有所启发和帮助。

国内LLMs大型语言模型排行榜!

在人工智能领域,语言模型是一种被广泛应用的技术。它能够理解和生 类语言,为我们的生活和工作带来了很多便利。在国内,有许多大型语言模型在不断发展和进步,为用户提供更好的语言交互体验。下面就让我们来看看国内大型语言模型的排名吧!排名第一的是的 大脑 作为在人工智能领域的代表产品,大脑凭借其强大的语言理解...

大语言模型与AI Agent合力推动AI发展

任何人都可以通过ai agent轻松构建字的gpt 这恐怕是刚刚在月日举办的openai上最令人振奋的消息之一。有专业人士分析认为,openai此次发布的gpts和assistants api都算是openai agent化 的一个步伐 gpts算是openai提供的 零 的agent实现方案,而a...

大语言模型的魅力 Amazon Bedrock 初体验

这场生成式ai与大语言模型的饥饿游戏,亚马逊云科技也参与了进来。年,亚马逊云科技正式发布了 amazon bedrock,是客户使用基础模型构建和扩展生成式ai应用程序的最简单方法,为所有开发者降低使用门槛。在 bedrock 上,用户可以通过可扩展 可靠且安全的亚马逊云科技托管服务,访问从文本到图...