授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在亚马逊云科技开发者社区, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道。

一.亚马逊云科技 2023 re:Invent 全球大会

随着数据的快速增长,高效、可靠的云存储解决方案变得越来越重要。在这个背景下,亚马逊云科技推出的 Amazon S3 Express One Zone 提供了全新的存储体验,它不仅具备了极高的速度,而且具有强大的安全性,为用户的数据存储和管理带来了革命性的改变。

image.png

各位读者大家好,我是一见已难忘,在本次大会中,亚马逊云科技发布 Amazon S3 Express One Zone-面向性能关键型应用程序的超高速云对象存储 。

亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术,观点,和项目,并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏,看到这里请一定不要匆匆划过,点这里让它成为你的技术宝库!

今天在 Amazon S3 Express One Zone 官网看到推荐使用 Amazon S3 Express One Zone 搭配 Amazon SageMaker 模型训练的使用思路,那今天我们就来深度体验探索一下基于 Amazon S3 Express One Zone 和 Amazon SageMaker 的图像分类实战—以猫狗识别模型为例,并且探索项目采用 Amazon S3 标准版与 Amazon S3 Express One Zone 的差距~

1.1 Amazon S3 Express One Zone-面向性能关键型应用程序的超高速云对象存储

Amazon S3 Express One Zone 是一款专注于高性能的单可用区存储服务,为经常访问的数据和对延迟敏感的应用程序提供可靠的毫秒级数据访问性能。

相较于 S3 Standard,S3 Express One Zone 提供了10倍的数据访问速度提升和50%的请求成本降低,同时具备灵活的扩展性,支持处理每分钟数百万个请求的需求。可以选择将存储与计算资源放置在同一可用区,以进一步优化性能,降低计算成本,提高工作负载的运行速度。

可以将 S3 Express One Zone 与 Amazon SageMaker 模型训练 、Amazon Athena、Amazon EMR 和 Glue Data Catalog 等服务结合使用,从而加速机器学习和分析工作负载。

Amazon S3 Express One Zone 工作原理图:

image.png

Amazon S3 Express One Zone 官网:

高性能存储 – S3 Express One Zone

1.1.1 与传统标准版 Amazon S3 相比

Amazon S3 Express One Zone 与 Amazon S3 相比,特点主要表现在性能和延迟方面。S3 Express One Zone 具有持续的极低延迟,最多可以达到标准版 S3 的十倍性能,每秒能够处理数十万次请求,并始终保持几毫秒的延迟。

它主要面向延迟敏感型工作负载,比如金融交易分析、实时广告推荐、欺诈检测、机器学习训练等场景。对于这些场景经常需要在短时间内发起数百万次的数据访问,并且延迟要求还很高,S3 Express One Zone 可以协助显著缩短数据密集型应用程序的运行时间。

另外,S3 Express One Zone 可以处理任何规模的对象,但对于较小的对象来说尤其作用明显。这是因为对于较小的对象,第一个字节的处理时间与最后一个字节的处理时间非常接近。在所有存储系统中,较大的对象需要更长的时间进行流式处理,因为在传输过程中需要下载更多的数据,并且因此存储延迟对对象读取总时间的影响较小。

与大型对象相比,较小的对象可以从较低的存储延迟中获得巨大的优势。由于 S3 Express One Zone 具有持续的极低延迟,因此与 Amazon S3 相比,读取小型对象的速度最多可以提升10倍。

1.2 Amazon SageMaker

Amazon SageMaker 是亚马逊云科技提供的一项机器学习(ML)服务。它旨在帮助开发人员和数据科学家轻松构建、训练和部署机器学习模型。SageMaker 提供了一个端到端的机器学习平台,涵盖了从数据准备和模型训练到模型部署和推理的整个机器学习工作流程。

Amazon SageMaker 官网:Amazon SageMaker 机器学习_机器学习模型构建训练部署-亚马逊云科技云服务

二.基于 Amazon S3 Express One Zone 和 Amazon SageMaker 的图像分类实战—以猫狗识别模型为例

2.1 项目背景

随着数据规模的迅速增长,图像分类在许多领域都发挥着重要作用。在这个项目中,我们将利用亚马逊云科技的两项关键服务,Amazon S3 Express One Zone 和 Amazon SageMaker,来构建一个猫狗图像分类模型。这个项目旨在展示如何利用高性能的云对象存储服务和机器学习平台,快速而有效地构建和训练一个图像分类模型。

2.2 模型必备

开始项目时请准备:

  1. 准备亚马逊云科技账号,开通本文所需功能权限。
  2. 超大数据集(包含训练集25000张,测试集图片12500张)。
  3. 本文所需的模型代码、依赖环境等。

2.3 Amazon S3 Express One Zone 创建和配置

亚马逊云科技推出的 Amazon S3 Express One Zone 提供了前所未有的存储体验,它凭借极高的速度、强大的安全性、高可用性和可扩展性,为用户的数据存储和管理带来了革新,它的创建和配置也算相当的方便快捷,如果有使用 Amazon S3 标准版的经验几乎不会遇到什么困难。

在进行 Amazon S3 Express One Zone 的创建和配置之前,需要先登录亚马逊云科技的账号,到控制台搜索 S3,点击进入。如下图:

image.png

1.创建一个存储桶。如下图:

说明:使用 S3,无需支付最低费用。只需为使用的内容付费。

image.png

2.填写需要的配置信息,如下图,需要注意的是要选择右边的目录存储桶,这个就是我们需要的 Amazon S3 Express One Zone。

我的存储桶名称叫:dog-and-cat。加上后缀全称为:dog-and-cat--use1-az4--x-s3。

推荐用于低延迟应用场景。这些存储桶仅使用 S3 Express One Zone 存储类,可在单个可用区内更快地处理数据。

image.png

3.创建完成会有以下提示,我们还可以在 Amazon S3 的存储桶中点击目录存储桶,即可看到我们刚刚创建的。

image.png

4.配置存储桶策略

如果在后续的操作中遇到权限等问题,我这里也是亲自操作给到了解决方案:

在“存储桶策略”部分,可以添加一个新的策略或编辑现有策略。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::your-bucket-name/*"
    }
  ]
}

your-bucket-name 替换为存储桶名称。

或者使用亚马逊云科技 CLI 设置存储桶策略:

amazon s3api put-bucket-policy --bucket your-bucket-name --policy '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":"","Action":"s3:GetObject","Resource":"arn:aws:s3:::your-bucket-name/"}]}'

本节心得:

Amazon S3 Express One Zone 的创建和配置相当便捷,特别是对于那些已经有 Amazon S3 标准版经验的用户。文档提供了一个详细而清晰的步骤指南,使用户能够快速而顺利地创建和配置 Amazon S3 Express One Zone 存储桶。

这种平滑的过渡使用户能够更轻松地迁移到更高性能的存储解决方案。

2.4 Amazon S3 Express One Zone 存储模型数据

完成上面配置之后,我们就可以存储我们本次训练模型的数据了。上传的方式也有很多种,我们可以上传压缩包,也可以直接上传文件夹,也可以使用亚马逊云科技的一些根据上传等等。

如下图是我上传的一批图片数据集,本批上传2205张。本项目完整超大数据集(包含训练集25000张,测试集图片12500张)

image.png

目录结构如下:

image.png

本节心得:

  1. 亚马逊云科技有多种上传数据的方式,包括上传压缩包、直接上传文件夹、亚马逊云科技的上传工具包以及利用提供的其他的第三方工具等等,十分便捷。
  2. 存储在 Amazon S3 Express One Zone 中的数据集的组织方式。这对于用户在后续操作中能够更容易地定位和管理他们的数据集是很有帮助的。

2.5 Amazon SageMaker 部署创建

Amazon SageMaker 创建模型的创建也是十分的方便快捷。

1.我们首先到控制台搜索 Amazon SageMaker 点击进入,创建笔记本实例:

image.png

2.我的实例名称叫 dog-and-cat,与我的主题贴合。需要注意的一点就是在角色那块,需要设置我们的特定存储桶 “dog-and-cat--use1-az4--x-s3 ”。创建实例后(等待 5-10min 左右)就可以点击打开 Jupyter 了。

image.png

image.png

3.在 Jupyter 中点击我们的 conda_python3 创建一个文件就可以开始写我们的模型代码了。

image.png

心得总结:

  1. Amazon SageMaker 的创建模型过程开始于控制台,通过搜索和点击的方式即可轻松进入。这种直观的导航使得用户能够快速找到并启动他们所需的操作,提高了整个使用体验。
  2. 笔记本实例创建完成,等待5-10分钟后就可以点击打开 Jupyter 了。这个步骤的迅速完成使用户能够尽快进入模型代码的编写阶段,提高了整体工作效率。
  3. 文在 Jupyter 中可以通过点击 conda_python3 创建文件开始编写模型代码。这种集成的环境简化了模型开发的流程,用户无需额外配置环境,直接在熟悉的 Jupyter 界面中进行代码编写。

2.6 图像分类代码撰写训练模型部署

1.我们的图像分类代码撰写部署环节就更多的考验我们人工智能领域的相关技术。首先我们需要检查一下 jupyter 里有没有缺什么模块包,我们提前对其进行一个安装。

pip install tensorflow

image.png

2.设置目标存储桶:本模型训练会频繁的读取 Amazon S3 Express One Zone 里的数据,我们需要先设定 S3 存储桶。

import sagemaker
sess = sagemaker.Session()
bucket = "dog-and-cat--use1-az4--x-s3"
sess = sagemaker.Session(
    default_bucket = bucket
)
# 打印默认的 S3 存储桶名称
print(f"Default S3 bucket: {bucket}")

3.要从 Amazon S3 存储桶中读取文件,可以使用 boto3 库,这是 SDK for Python。

import boto3
from botocore.exceptions import NoCredentialsError
# 替换为你的亚马逊云科技访问密钥ID和秘密访问密钥
aws_access_key_id = 'your_access_key_id'
aws_secret_access_key = 'your_secret_access_key'
bucket_name = 'dog-and-cat--use1-az4--x-s3'
file_key = data/training'
s3 = boto3.client('s3', aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key)
try:
    s3.download_file(bucket_name, file_key, 'local_file.jpg')
    print(f'Successfully downloaded file from S3 to local_file.jpg')
except NoCredentialsError:
    print('Credentials not available')
    

4.训练模型代码较长,这里说一下核心代码块:

将本地文件(在这里特指训练集数据和日志文件)上传到 Amazon S3 存储桶中,以便在云环境中进行存储和后续处理。

# 创建S3客户端
s3 = boto3.client('s3', aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key)
 
def upload_to_s3(local_path, bucket, s3_path):
    for root, dirs, files in os.walk(local_path):
        for file in files:
            local_file_path = os.path.join(root, file)
            s3_file_path = os.path.join(s3_path, local_file_path[len(local_path):])
            try:
                # 上传文件到S3
                s3.upload_file(local_file_path, bucket, s3_file_path)
                print(f'Successfully uploaded {local_file_path} to {s3_file_path}')
            except NoCredentialsError:
                print('Credentials not available')
 
# 上传训练集数据到S3
upload_to_s3(train_dir, bucket_name, 'data/train/')
 
# 上传日志到S3
upload_to_s3(logs_train_dir, bucket_name, 'log/')

5.如果想要达到最好的效果 MAX_STEP = 2000 应该为20000,但是由于训练时间太长原因,现在设置为 2000。

image.png

在经历的一段时间后的训练模型结果:

image.png

本节心得:

  1. 通过 SageMaker Session 对象和 Boto3 库,设置了用于存储训练数据和模型的 S3 存储桶。这是在云环境中进行训练所必需的步骤。
  2. 为了在云环境中进行训练,需要将本地文件上传至 S3 存储桶。通过自定义的 upload_to_s3 函数实现了这一步骤,涉及训练集数据和日志文件的上传。

2.7 图像分类代码撰写测试模型部署

测试模型和上文的训练模型都使用 S3 Express One Zone 里的图像数据,测试集图片12500张。连接 S3 Express One Zone 和存取的代码相同,这里列举部分核心代码以及模型测试结果。

test_img = input_data.get_files(test_dir)[0]   # 获取测试集的图片路径列表
    image_array = get_one_image(test_img)          # 从测试集中随机选取一张图片
    # 将这个图设置为默认图,会话设置成默认对话,这样在with语句外面也能使用这个会话执行。
    with tf.Graph().as_default():   
        BATCH_SIZE = 1               # 这里我们要输入的是一张图(预测这张随机图)
        N_CLASSES = 2                # 还是二分类(猫或狗)
 
        image = tf.cast(image_array, tf.float32)                    # 将列表转换成tf能够识别的格式
        image = tf.image.per_image_standardization(image)           # 图片标准化处理
        image = tf.reshape(image, [1, 208, 208, 3])                 # 改变图片的形状
        logit = model.cnn_inference(image, BATCH_SIZE, N_CLASSES)   # 得到神经网络输出层的预测结果
        logit = tf.nn.softmax(logit)                                # 进行归一化处理(使得预测概率之和为1)
 
        x = tf.placeholder(tf.float32, shape=[208, 208, 3])         # x变量用于占位,输入的数据要满足这里定的shape
 
        # 修改成自己训练好的模型路径
        logs_train_dir = 'log/'
 
        saver = tf.train.Saver()
 
        with tf.Session() as sess:
            print("从指定路径中加载模型...")
            ckpt = tf.train.get_checkpoint_state(logs_train_dir)   # 读取路径下的checkpoint
            # 载入模型,不需要提供模型的名字,会通过 checkpoint 文件定位到最新保存的模型
            if ckpt and ckpt.model_checkpoint_path:                # checkpoint存在且其存放的变量不为空
                global_step = ckpt.model_checkpoint_path.split('/')[-1].split('-')[-1]   # 通过切割获取ckpt变量中的步长
                saver.restore(sess, ckpt.model_checkpoint_path)    # 当前会话中,恢复该路径下模型的所有参数(即调用训练好的模型)
                print('模型加载成功, 训练的步数为: %s' % global_step)
            else:
                print('模型加载失败,checkpoint文件没找到!')
 
            # 通过saver.restore()恢复了训练模型的参数(即:神经网络中的权重值),这样logit才能得到想要的预测结果
            # 执行sess.run()才能运行,并返回结果数据
            prediction = sess.run(logit, feed_dict={x: image_array})   # 输入随机抽取的那张图片数据,得到预测值
            max_index = np.argmax(prediction)                          # 获取输出结果中最大概率的索引(下标)
            if max_index == 0:
                pre = prediction[:, 0][0] * 100
                print('图片是猫的概率为: {:.2f}%'.format(pre))       # 下标为0,则为猫,并打印是猫的概率
            else:
                pre = prediction[:, 1][0] * 100
                print('图片是狗的概率为: {:.2f}%'.format(pre))       # 下标为1,则为狗,并打印是狗的概率
 
    plt.imshow(image_array)                                        # 接受图片并处理
    plt.show()                                                     # 显示图片

训练结果:

image.png

image.png

这是在训练为步数的情况下的测试结果,基本满足了我们的模型要求,当然模型也有很大的改进空间。

本节心得:

使用了 S3 Express One Zone 中的图像数据进行模型测试,测试集包含12500张图片。与训练模型阶段相似,通过 Boto3 库连接 S3 Express One Zone 并获取测试集的图片路径列表。

2.8 采用标准版 S3 和 S3 Express One Zone 分别测试对比实验

为了 S3 Express One Zone 对比传统的 S3 标准版的性能提升差距,我特意使用了3个亚马逊账号来分别跑模型,测算他的训练时间差距,操作过程如上文。

image.png

以下是我用3个账号跑了2天多的时间记录(因中间账号权限原因有的操作耽误了些时间,可能有一些时间记录误差,但依然有参考意义)Amazon S3 标准版和 Amazon S3 Express One Zone 为本次实验的唯一变量,其他的环境和代码均相同。

image.png

将数据进行可视化,我们可以直观的看到采用 S3 Express One Zone 的训练时间要低于标准版 S3 的训练时间。

image.png

数据分析:

训练时间减少百分比=[(采用 S3 训练时间−采用 Amazon S3 Express One Zone 训练时间) /采用 S3 训练时间]×100

  • 对于 2000 张训练集,训练时间减少了约 11.8%。
  • 对于 5000 张训练集,训练时间减少了约 20.8%。
  • 对于 10000 张训练集,训练时间减少了约 4.5%。
  • 对于 20000 张训练集,训练时间减少了约 11.2%。

可以看到除10000张下降幅度较小,其他均在10~20左右,10000张可以受到了其他因素干扰,但在宏观可以看到采用 Amazon S3 Express One Zone 训练时间下降是明显的。

我在查阅了一些资料后,对这个结果有了一定的理解。照成这个结果的原因有下(一定程度上也受其他的影响,但整体来看还是可以表现出 Amazon S3 Express One Zone 的特点)。

  1. Amazon S3 Express One Zone 提供了极低的延迟和比 S3 Standard 存储类低50%的请求成本,这意味着 Spot 和按需计算资源可以更高效地使用,并且可以更早关闭。
  2. 由于其延迟极低,因此对于需要快速访问和处理大量数据的大语言模型和其他基础模型训练任务来说,S3 Express One Zone 可以提供极佳的性能。
  3. 由于 S3 Express One Zone 的低延迟和高性能特性,这可以使得训练过程更加快速和高效。
  4. 官网是使用 Amazon Trainium2 进行基础模型的训练,该芯片专为分布式训练而设计,可以将训练时间缩短高达40%。(我这里虽然不是 Amazon Trainium2 进行基础模型的训练,但是依然缩短了10~20左右)。

三.总结与心得

3.1 心得-测评有感

这次深入的体验探索了一下发布会说的新功能,确实很惊艳,不愧为老牌IT科技公司,发布的产品都是有革命性质的,给我带来了不少的震撼,通过本次的模型实验我总结了下面几个优点,这几个最让我震撼!

  1. Amazon S3 Express One Zone 专注于高性能的单可用区存储服务,提供了极高的速度和低延迟。这种性能的提升对于需要快速访问和处理大量数据的应用程序来说非常重要。
  2. 与传统的 S3 Standard 存储类相比,S3 Express One Zone 不仅提供了性能优势,还降低了请求成本。这意味着用户可以在不牺牲性能的情况下,更经济高效地管理他们的数据,亚马逊这次真的是做了一款好产品!
  3. Amazon S3 Express One Zone 其便捷性和用户友好的操作。这种灵活性使得用户能够快速、顺利地创建和配置存储桶,平滑过渡到更高性能的存储解决方案,这对我们用户来说非常友好,有相关经验的朋友是可以直接上手的!
  4. 我通过图像分类项目的实战,成功想大家展示了 Amazon S3 Express One Zone 在机器学习领域的应用。这种实际应用案例使得产品更具说服力,能够直观地展示其在解决实际问题时的优越性能。看我上面的实验过程就知道了,我把 Amazon S3作为实验唯一变量之后,得出使用 Amazon S3 Express One Zone 普遍可以降低10%~20%的训练时间,虽然用没有使用 Amazon Trainium2 进行基础模型的训练,达到官方降低40%,但是我实验数据也体现了新产品性能的提升不是一点半点的!
  5. 我通过与标准版 S3 的性能对比实验,详细记录了不同训练集大小下的训练时间,并验证了采用 S3 Express One Zone 训练时间的明显降低。这样的实验证明了产品在实际使用中的优越性能。

可以看第2.8节 采用标准版 S3 和 S3 Express One Zone 分别测试对比实验过程,完整的论述证明了这一事实观点,本次 S3 Express One Zone 给我带来了极大的震撼!

3.2 总结

到最后的总结阶段了,本文采用了 Amazon S3 Express One Zone 官网看到推荐使用 Amazon S3 Express One Zone 搭配 Amazon SageMaker 模型训练的测评思路,用基于 Amazon S3 Express One Zone 和 Amazon SageMaker 的图像分类实战—以猫狗识别模型为例,并且探索项目采用 Amazon S3 标准版与 Amazon S3 Express One Zone 的差距。完整的描述了具体的使用过程,最后也将 S3 作为实验变量对官方给出的一系列优点进行了核实验证,从我的实验角度来看,本次亚马逊云科技发布的新产品:Amazon S3 Express One Zone。是相当震撼的,是一个革命的、创新的、里程碑的产品,下面我总结了一下本文的内容,感谢大家阅读学习!

  • 亚马逊云科技推出的创新产品 Amazon S3 Express One Zone。该产品专注于高性能的单可用区存储服务,以提供极高的速度和低延迟,适用于对数据访问性能要求高的应用程序。相较于传统的 S3 Standard 存储类,S3 Express One Zone 提供了显著的性能提升和请求成本降低。通过在图中展示工作原理,文中详细介绍了其优势和适用场景。
  • 在通过基于 Amazon S3 Express One Zone 和 Amazon SageMaker 的图像分类实战案例,用3个账号分别测试 Amazon S3 标准版和 Amazon S3 Express One Zone 性能提升结果可以看出,Amazon S3 Express One Zone对比 AmazonS3 标准版性能和延迟方面提升很大。
  • 结合 Amazon S3 Express One Zone 和 Amazon SageMaker 进行模型训练。以猫狗识别模型为例,详细介绍了项目的背景、所需材料、Amazon S3 Express One Zone 的创建和配置、模型数据的存储以及 SageMaker 的创建和配置等步骤。整个过程中,突出了 Amazon S3 Express One Zone 的便捷性和高性能。
  • 使用 SageMaker 进行模型的创建、训练和部署。通过清晰的步骤和代码演示,展示了如何在 SageMaker 中进行模型的各个阶段,包括数据的上传、模型的训练和测试。整个过程中,SageMaker 提供了便捷的平台,简化了机器学习工作流程。

Amazon S3 Express One Zone 在性能和延迟方面的优势为用户提供了更高效的云存储解决方案。

通过实际项目的经验,我成功实现了该产品在图像分类领域的应用,并通过对比实验验证了其性能优势。随着技术的不断发展,这样的创新产品将为用户在大数据处理、机器学习等领域带来更好的体验,我们一起期待亚马逊云科技的下一次新产品问世!

文章来源:https://dev.amazoncloud.cn/column/article/65896f6a79476548e3e...


亚马逊云开发者
2.9k 声望9.6k 粉丝

亚马逊云开发者社区是面向开发者交流与互动的平台。在这里,你可以分享和获取有关云计算、人工智能、IoT、区块链等相关技术和前沿知识,也可以与同行或爱好者们交流探讨,共同成长。