在亚马逊云科技上利用Graviton4代芯片构建高性能Java应用(下篇)

简介

在AI迅猛发展的时代,芯片算力对于模型性能起到了至关重要的作用。一款能够同时兼具高性能和低成本的芯片,能够帮助开发者快速构建性能稳定的生成式AI应用,同时降低开发成本。今天小李哥将介绍亚马逊推出的4代高性能计算处理器Gravition,带大家了解如何利用Graviton芯片为Java开发的生成式AI应用提高性能、优化成本。

本系列上篇文章介绍了如何在云平台上创建Graviton芯片服务器,并在Graviton芯片服务器上安装Java应用,并对比Java应用在Graviton和Intel芯片服务器上的运行性能。在本系列下篇中,我们将利用Graviton芯片部署Java容器应用,并利用亚马逊云科技原生容器镜像库ECR保存和管理Java多架构容器镜像和容器Manifest清单。

方案所需基础知识

什么是Graviton4代芯片?

Amazon Graviton 4 处理器由亚马逊云科技定制设计的第四代高性能、低功耗处理器,旨在为 Amazon 计算服务中的工作负载提供最佳性价比,相对于传统计算类工作负载(Graviton2)提供高达40%的性价比提升。与常见的 x86 处理器相比,基于 Graviton 4 的 EC2 实例具有以下特性:

  • 每个 vCPU 独占一个物理核心的计算资源,而非通过 SMT 技术获得一个线程;
  • 每个 vCPU 拥有更大的 L1/L2 Cache 容量;
  • 更快的内存带宽和更低的内存延时。
  • Graviton 处理器支持众多 Linux 操作系统,包括 Red Hat Enterprise Linux、SUSE 和 Ubuntu 等。
  • Graviton 兼容众多云原生服务和开源软件,兼容亚马逊云科技上的开发工具,数据库,容器,分析,无服务器等服务,拥有丰富的应用生态。

最新发布的第 4 代 Graviton 处理器(基于 Arm Neoverse-V2,ARMv9.0-a);主频提升,L2 缓存翻倍,L3 缓存容量提升,支持 SVE2; 内存:12*DDR5-5600(前代采用 8*DDR5-4800),内存带宽提升 75%;

本实践包括的内容

1. 在亚马逊云科技上分别创建x86芯片以及Graviton4芯片的服务器

2. 构建兼容x86芯片以及Graviton4芯片的多架构容器镜像及Manifest清单

3. 在服务器中根据Manifest清单启动并运行java多架构容器应用

项目实操步骤

创建Graviton4芯片服务器

  1. 首先我们进入亚马逊云科技控制台,进入EC2服务

2.点击Launch Instance创建一台EC2服务器

3.在芯片架构处,我们选择实例类型为r8g.xlarge(4vCPU和32GiB内存)实例用于创建Graviton4芯片服务器。另外我们还需要创建一个r6i.xlarge实例,实例用于创建Intel x86芯片服务器。

  1. 创建SSH登录秘钥对

5.为密钥对命名,并选择pem类型,点击右下角创建。

6.运行以下命令为密钥对授权,用于SSH登录服务器

bash 复制代码
chmod 400 test-only.pem
  1. 为EC2服务器添加VPC和子网配置

8.选择配置防火墙安全组,在防火墙入站规则中添加允许SSH从0.0.0.0/0 IP范围访问

9.并选择服务器存储,我们选择gp3类型的80GiB的磁盘存储。

通过SSH连接进入服务器

10.通过以下命令SSH登录到EC2服务器中,将创建好的EC2服务器IP地址替换到命令中"EC2实例公网 IP 地址"字段

bash 复制代码
ssh -i /path/key-pair-name.pem ec2-user@EC2实例公网 IP 地址

为多架构容器创建容器镜像库

  1. 进入到ECR服务主页,在左侧菜单栏点击"Repositories",点击红框创建镜像库
  1. 将容器镜像库命名为"multiarchjava",选择类型为私有,并点击创建
  1. 创建完成后,我们可以在镜像库列表中看到我们刚创建的镜像库
  1. 我们复制上图中的URI部分,URI格式如下:
bash 复制代码
{ACCOUNT_ID}.dkr.ecr.{AWS_REGION}.amazonaws.com/{存储库名称}
  • Account_ID为亚马逊云科技账号ID
  • AWS_REGION为ECR镜像库所在区域
  • 存储库名称为"multiarchjava"
  1. 接下来我们打开亚马逊云科技云端命令行CloudShell
  1. 接下来我们运行以下Shell命令获取ECR镜像库API访问的授权密码
bash 复制代码
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
export AWS_REGION=$(curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/placement/region)
aws ecr get-login-password --region $AWS_REGION

运行后会得到以下输出,红框内的部分为密码:

构建多架构容器镜像

  1. 在x86芯片服务器中,我们执行下面的命令用于安装启动Docker必要依赖
bash 复制代码
sudo su - root

## 安装 Amazon CLI
curl "https://awscli.amazonaws.com/awscli-exe-linux-$(arch).zip" -o "awscliv2.zip"
unzip -q awscliv2.zip 
./aws/install --update

## 安装 Docker
yum install -y jq git docker
systemctl start docker
  1. 在运行以下命令,从远程Github拉取项目代码,构建Docker镜像。其中ECR_URL为我们在前面获取的ECR URL,构建的镜像标签为amd64
bash 复制代码
ECR_URL=xxxxxxxxxxxx.dkr.ecr.us-west-2.amazonaws.com

git clone https://github.com/ddynwzh1992/javaapp_graviton.git
cd javaapp_graviton/
docker build --tag $ECR_URL/multiarchjava:amd64 .
  1. 我们通过以下命令登录ECR镜像库,输入密码授权访问,最后将镜像上传到镜像库中
bash 复制代码
docker login --username AWS $ECR_URL
docker push $ECR_URL/multiarchjava:amd64
  1. 对于Gravition架构上的Docker镜像,我们使用相同的方法构建和上传镜像,唯一的区别是该镜像标签为arm64。
bash 复制代码
docker build --tag $ECR_URL/multiarchjava:arm64 .
  1. 在全部上传成功后,我们会在ECR镜像库中看到两个不同标签的Docker镜像

创建多架构容器Manifest清单并启动容器

  1. 我们运行以下命令创建多架构容器的Manifest清单,并推送清单到ECR镜像库中
bash 复制代码
## 创建 Manifest 清单
docker manifest create $ECR_URL/multiarchjava:javaapp --amend \
  $ECR_URL/multiarchjava:amd64 \
  $ECR_URL/multiarchjava:arm64

## 推送 Manifest 清单
docker manifest push $ECR_URL/multiarchjava:javaapp
  1. 我们在ECR镜像库中可以看到新上传的标签为javaapp的Manifest清单,类型为Image Index
  1. 如果我们想在不同芯片架构的服务器中通过Manifest清单启动镜像,我们需要运行以下命令
bash 复制代码
docker run -it -p 8010:8010 $ECR_URL/multiarchjava:javaapp
  1. 启动成功后会得到如下多架构容器应用日志输出

以上就是利用亚马逊云科技自研Graviton4代芯片构建高性能、低成本的Java多架构容器应用程序的下篇内容。欢迎大家关注小李哥和我的亚马逊云科技AI服务深入调研系列,不要错过未来更多国际前沿的AWS云开发/云架构方案。

相关推荐
爱喝热水的呀哈喽6 分钟前
《机器学习》支持向量机
人工智能·决策树·机器学习
minstbe10 分钟前
AI开发:使用支持向量机(SVM)进行文本情感分析训练 - Python
人工智能·python·支持向量机
月眠老师13 分钟前
AI在生活各处的利与弊
人工智能
四口鲸鱼爱吃盐29 分钟前
Pytorch | 从零构建MobileNet对CIFAR10进行分类
人工智能·pytorch·分类
苏言の狗30 分钟前
Pytorch中关于Tensor的操作
人工智能·pytorch·python·深度学习·机器学习
bastgia1 小时前
Tokenformer: 下一代Transformer架构
人工智能·机器学习·llm
菜狗woc1 小时前
opencv-python的简单练习
人工智能·python·opencv
15年网络推广青哥1 小时前
国际抖音TikTok矩阵运营的关键要素有哪些?
大数据·人工智能·矩阵
weixin_387545642 小时前
探索 AnythingLLM:借助开源 AI 打造私有化智能知识库
人工智能
木子Linux2 小时前
【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区
linux·运维·服务器·centos·云计算