当前位置: 首页 > article >正文

在亚马逊云科技上利用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芯片服务器。

4. 创建SSH登录秘钥对

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

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

chmod 400 test-only.pem

7. 为EC2服务器添加VPC和子网配置

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

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

通过SSH连接进入服务器

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

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

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

11. 进入到ECR服务主页,在左侧菜单栏点击”Repositories“,点击红框创建镜像库

12. 将容器镜像库命名为”multiarchjava“,选择类型为私有,并点击创建

13. 创建完成后,我们可以在镜像库列表中看到我们刚创建的镜像库

14. 我们复制上图中的URI部分,URI格式如下:

{ACCOUNT_ID}.dkr.ecr.{AWS_REGION}.amazonaws.com/{存储库名称}
  • Account_ID为亚马逊云科技账号ID
  • AWS_REGION为ECR镜像库所在区域
  • 存储库名称为”multiarchjava“

15. 接下来我们打开亚马逊云科技云端命令行CloudShell

16. 接下来我们运行以下Shell命令获取ECR镜像库API访问的授权密码

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

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

构建多架构容器镜像

17. 在x86芯片服务器中,我们执行下面的命令用于安装启动Docker必要依赖

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

18. 在运行以下命令,从远程Github拉取项目代码,构建Docker镜像。其中ECR_URL为我们在前面获取的ECR URL,构建的镜像标签为amd64

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 .

19. 我们通过以下命令登录ECR镜像库,输入密码授权访问,最后将镜像上传到镜像库中

docker login --username AWS $ECR_URL
docker push $ECR_URL/multiarchjava:amd64

20. 对于Gravition架构上的Docker镜像,我们使用相同的方法构建和上传镜像,唯一的区别是该镜像标签为arm64。

docker build --tag $ECR_URL/multiarchjava:arm64 .

21. 在全部上传成功后,我们会在ECR镜像库中看到两个不同标签的Docker镜像

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

22. 我们运行以下命令创建多架构容器的Manifest清单,并推送清单到ECR镜像库中

## 创建 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

23. 我们在ECR镜像库中可以看到新上传的标签为javaapp的Manifest清单,类型为Image Index

 

24. 如果我们想在不同芯片架构的服务器中通过Manifest清单启动镜像,我们需要运行以下命令

docker run -it -p 8010:8010 $ECR_URL/multiarchjava:javaapp

25. 启动成功后会得到如下多架构容器应用日志输出

 

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


http://www.kler.cn/a/301216.html

相关文章:

  • angular的promise实战案例
  • Qt桌面应用开发 第五天(常用控件)
  • H.265流媒体播放器EasyPlayer.js网页直播/点播播放器WebGL: CONTEXT_LOST_WEBGL错误引发的原因
  • 找不到vcruntime140.dll怎么办,彻底解决vcruntime140.dll丢失的5种方法
  • C指针之舞——指针探秘之旅
  • django的model时间怎么转时间戳
  • 3.Kubernetes资源对象之pod
  • 828华为云征文|华为云Flexus X实例docker部署最新版禅道构建属于自己的项目管理平台
  • 文心智能体应用:美国旅游助手的诞生
  • 【进展报告】9.9-9.12
  • Cargo 入门
  • 远程控制软件有哪些?不多,给你奉上这6款神仙软件
  • nodeJS学习笔记——包npm(2)
  • vue3利用ref操作dom元素
  • MySQL 的关键字
  • 高级 ECharts 技巧:自定义图表主题与样式
  • 详解Redis的AOF持久化方式以及aof日志重写配置以及对redis中的GEO地理位置数据类型命令的应用示例
  • 2023下半年软考网络规划
  • 【信号】信号的保存
  • ffmpeg面向对象-rtsp拉流相关对象
  • 为什么不写注释?写“为什么不”注释?
  • pdf删除一页怎么删除?5种方法详细讲解,pdf删除页面实用技巧分享!
  • 【iOS】push和present的区别
  • echarts 多个3D柱状图
  • Python爱心射线(完整代码)
  • git一个项目关联多个远程仓库