暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

在亚马逊云科技上构建基于 SOAFEE 的云原生软件定义汽车实践

677

点击上方入口立即【自由构建 探索无限】

一起共赴年度科技盛宴!


前言

随着汽车行业智能化、网联化的加速发展,以智能座舱、辅助驾驶与自动驾驶、车联网为代表的汽车软件不断推陈出新,传统以 ECU 为核心面向信号的分布式电子电气架构很难满足智能网联时代消费者对汽车的需求,新一代的电子电气架构朝着集中化的方向演进,域控制器已成为主流,未来将会出现车载中央计算平台。汽车硬件会朝着标品化方向发展,车辆功能与用户体验的差异性依靠车载软件与云上服务来体现,“软硬件解耦、硬件预埋、软件升级”将会带来汽车更长生命周期内的价值持续释放。


软件定义汽车已经成为行业的共识,但企业需要构建新的软件开发能力来应对软件定义时代的挑战。例如,为提高开发的效率,避免在昂贵且有限的嵌入式平台上开发,需要采用算力更强大、资源供给更便捷的通用计算平台;具备敏捷开发能力,软件代码的构建、持续集成与验证工作需要能够自动执行,以便快速验证,满足软件迭代的要求;加强软件的可移植性,在开发环境中编译的程序需要在不同的嵌入式设备中运行,包括硬件台架、板卡、车端,避免环境的差异性带来代码重构和重复编译对研发效率的降低;海量数据的管理包括数据存储、查找、处理,加速 AI/ML 模型的训练过程;降低软件组件之间的相互依赖性,减少软件升级对其他功能的影响,不同安全要求与实时性要求的软件相互隔离与独立;车载软件代码量越来越多,要能够有效管理维护这些代码,并利用更广泛的生态资源与能力共同开发软件。


2021年由 Arm、亚马逊云科技和其他创始成员共同宣布成立嵌入式边缘的可扩展开放架构SOAFEE (Scalable Open Architecture For Embedded Edge) 特别兴趣小组 (SIG) ,联合车厂、半导体公司、软件公司、云技术的领导企业共同定义一个新的开放标准架构来实现软件定义汽车的最低级别技术栈,提供一个参考实现,使云原生技术(如微服务、容器和编排系统)首次与汽车功能安全相结合,从而保持环境对等。


基于亚马逊云科技云上的服务和云原生技术,结合 SOAFEE 提供的环境对等技术栈,我们可以将车载软件的开发工作放在云上,利用云的弹性资源供给和随处可访问性,让开发人员能够并行地进行开发测试,能够满足海量数据处理与训练和测试验证工作所需要的计算能力;通过持续集成/持续部署 (CI/CD) 工具链让代码从提交到编译验证,再到部署到目标嵌入式设备,实现自动化的完成,提升迭代效率;微服务技术与容器化技术确保面向服务架构设计的应用系统运行在容器中,运行环境独立,既能够独立更新部署,也能够利用 SOAFEE 提供的混合任务编排器确保了容器运行所需的功能安全与实时性要求得到满足;云上 Amazon Graviton 提供与车端对等指令集 (ISA) 环境,编译验证后的软件可以顺利的运行在基于 Arm IP 授权芯片的 HPC、硬件台架和车上;SOAFEE 的开放架构,以及亚马逊云科技对开源生态的支持,能够利用开源技术赋能汽车软件的开发,加快汽车软件的开发效率,显著降低研发成本,让软件定义汽车成为可能。


本文将介绍如何在亚马逊云科技云上构建基于 SOAFEE 的云原生软件定义汽车的实践,它基于 ARM 架构的 Amazon Graviton 实例构建云上符合 SOAFEE 规范的对等环境,使用亚马逊云科技原生的 CI/CD 工具链,汽车软件在云上构建与验证,并通过 Amazon IoT Greengrass 部署到端侧 AVA 开发者平台的对等环境中运行,实现车云一体的云原生汽车软件开发流程。



关于Amazon Graviton, 

Amazon CodePipeline, 

Amazon CodeBuild, Amazon ECR,

 Amazon IoT Greengrass


基于 ARM IP 由亚马逊云科技自定义 SoC 的 Amazon Graviton 处理器为 Amazon EC2 中运行的云工作负载提供最佳性价比,是运行高级计算密集型工作负载的理想选择。其中包括例如高性能计算 (HPC) 、批处理、广告投放、视频编码、游戏、科学建模、分布式分析和基于 CPU 的机器学习推理等在内的工作负载。


Amazon CodePipeline 是一种完全托管的持续集成与持续交付服务,可以帮助您实现发布管道的自动化,从而实现快速而可靠的应用程序和基础设施更新。


Amazon CodeBuild 是一项完全托管的持续集成服务,可编译源代码、运行测试以及生成可供部署的软件包。使用 CodeBuild,您无需预置、管理和扩展自己的构建服务器。


Amazon Elastic Container Registry (Amazon ECR) 是完全托管式容器注册表,提供高性能托管,让您能在任何地方可靠地部署应用程序映像和构件。


Amazon IoT Greengrass 是一种开源边缘运行时和云服务,用于构建、部署和管理设备软件。使用预构建或定制的模块化组件更快地完成构建,您可以轻松地添加或移除这些组件以控制设备软件部署。大规模地远程部署和管理设备软件和配置,无需固件更新。通过 Amazon IoT Greengrass 能够轻松地为边缘设备带来智能。



解决方案架构综述


本方案阐述了在亚马逊云科技云上构建基于 SOAFEE 开放架构及云原生概念的软件定义汽车的方案。它基于 ARM 架构的 Amazon Graviton 实例构建云端符合 SOAFEE 规范的环境,使用亚马逊云科技原生的 DevOps CI/CD 工具链,实现云端构建应用镜像,通过 Amazon IoT Greengrass 部署到云端环境运行、测试,之后部署到端侧同样符合 SOAFEE 规范的 AVA 开发者平台https://docs.ipi.wiki/COMHPC/ava/index.html或树莓派对等硬件环境运行、测试。实现了车云环境对等的云原生软件开发流程。


方案的整体架构如下:



先决条件


  • 一个亚马逊云科技账户,Admin 用户权限及相应 Access Key/Secrete key

  • 一部开发主机或 EC2 虚拟机, Mac 或 Linux,安装 Amazon Command Line Interface

  • AVA Developer Platform

  • 一部树莓派 4B


演练操作步骤


本演练操作中有四个部分:


  • 在亚马逊云科技云上部署 CI/CD 流水线

  • 部署SOAFEE规范的云端 Graviton 实例环境

  • 配置车端SOAFEE规范的 AVA Developer Platform 或树莓派环境

  • 触发 CI/CD 流水线,车云对等环境运行 YOLO-V6 应用

在亚马逊云科技上部署 CI/CD 流水线


本部分将在使用 CDK 在 Amazon cn-north-1 区域部署 CI/CD 流水线。


a). 在开发主机上 clone CDK 代码:

https://github.com/gaoykxp/aws-automotive-soafee-env-parity-blog


git clone https://github.com/gaoykxp/aws-automotive-soafee-env-parity-blog.git


左滑查看更多


b). amazon configure 配置账户 access key, secrete key:


aws configure
AWS Access Key ID [****************WO5D]: 
AWS Secret Access Key [****************cJ8M]: 
Default region name [cn-north-1]: 
Default output format [json]:


左滑查看更多


c). 配置 CDK 环境:


export ACCOUNT_ID=<ACCOUNT_ID>
export AWS_REGION=cn-north-1
cd aws-automotive-soafee-env-parity-blog/ 
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade aws-cdk.core==1.99.0 wheel pandas pillow cython pycocotools matplotlib
pip install -r requirements.txt
cdk bootstrap aws://$ACCOUNT_ID/$AWS_REGION
cdk synth
cdk ls


左滑查看更多


输出结果如图所示:



d). 构建 CI/CD 流水线:


cdk deploy yolo-v6-application-pipeline


左滑查看更多


构建过程中输入"y"确认构建,构建过程大概持续几分钟。


您可以在 CloudFormation Console 中看到 yolo-v6-application-pipeline 构建成功。



在 CodePipeline 的 Console 中可以看到 yolo-v6-applicaion 的 pipeline。



在 CodeCommit 中可以看到构建了一个空的 yolo-v6-application  repository。



部署 SOAFEE 规范的

云端 Graviton 实例环境


在本节中,您将部署一个支持 SOAFEE 规范的 Yocto – EWAOL  Linux AMI 到基于 Amazon Graviton2 的 EC2 实例。我们预先根据 guide 制作了一个 AMI 共享到 community。您也可以按照 guide 自行构建 AMI,部署在其他亚马逊云科技区域,进行本文章的演练。


Yocto:

https://www.yoctoproject.org

EWAOL:

https://gitlab.arm.com/ewaol/meta-ewaol

guide:

https://aws.amazon.com/cn/blogs/industries/building-an-automotive-embedded-linux-image-for-edge-using-arm-graviton-yocto-project-soafee/


a). 登录 Amazon cn-north-1 的 EC2 控制台:


点击 Launch instance,


在 Step 1: Choose an Amazon Machine Image (AMI) 的搜索框中输入 AMI:ami-055b51e617a37d3c9,在 Community AMI 中会找到这个 AMI 镜像。



b). 选择 Select 构建 EC2 实例:


Instance type:t4g.medium

Storage:32GB


其它选择默认设置。



Launch,


选择使用已存在的 key pair 或者构建一个新的 key pair,这个 key pair 用来后续登录 EC2 做相关工作。



Launch Instance,可以看到符合 SOAFEE 规范的基于 ARM 的 Amazon Graviton2 t4g 实例构建成功。



c). 登录EC2:


参考指南登录你的 EC2,可以使用指南中推荐的方式或者其他 SSH 客户端,使用步骤 b) 保存的 key,用户名:ewaol ,登录 EC2。



指南:

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html


d). 调整 root partition 空间大小:


你可以逐条指令执行,或者创建一个批处理脚本,执行前后用 df -h 命令查看调整结果。


#!/bin/sh
# disabling swap
swapoff -a
sed -i '/.*swap.*/d' /etc/fstab
# trick to fix GPT
printf "fix\n" | parted ---pretend-input-tty /dev/nvme0n1 print
# remove partition 3 (swap)
parted -s /dev/nvme0n1 rm 3
# resize partition 2 to use 100% of available free space
parted -s /dev/nvme0n1 resizepart 2 100%
# resizing ext4 filesystem
resize2fs /dev/nvme0n1p2


左滑查看更多


e). Pull Greengrass docker 镜像:


docker login -u gaoykxp
password: dckr_pat_V2EdQvcBONakG2HBcTan168yi14


左滑查看更多



docker pull gaoykxp/greengrass-v2-ubuntu-2204-aarch64:0.2


左滑查看更多



f). 创建 Greengrass 核心设备:


执行如下命令运行 greengrass docker 容器:


docker run -it -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker --user root gaoykx
p/greengrass-v2-ubuntu-2204-aarch64:0.2 /bin/bash


左滑查看更多



设置环境变量,使用 access key 和 secret key:


cd /home
export AWS_ACCESS_KEY_ID=xxxxxxxxxxxxx
export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxx


左滑查看更多


执行以下命令创建并注册 greengrass 核心设备:


java -Droot="/greengrass/v2" -Dlog.store=FILE \
  -jar ./GreengrassInstaller/lib/Greengrass.jar \
  --aws-region cn-north-1 \
  --thing-name MySOAFEE-EC2-GreengrassCore \
  --thing-group-name MySOAFEE-EC2-GreengrassCoreGroup \
  --thing-policy-name GreengrassV2IoTThingPolicy \
  --tes-role-name GreengrassV2TokenExchangeRole \
  --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias \
  --component-default-user ggc_user:ggc_group \
  --provision true \
  --setup-system-service true


左滑查看更多



/greengrass/v2/alts/current/distro/bin/loader


左滑查看更多


启动 greengreass。



在 IoT Core 的控制台中可以看到新创建的 Greengrass 核心设备。



配置车端 SOAFEE 规范的

AVA Developer Platform 

或树莓派环境


AVA Developer Platform 是凌华科技(ADLINK)的汽车开发者平台,搭载了基于 ARM Neoverse 的 Ampere 处理器,作为高性能32核计算系统,能够运行自主工作负载,它允许开发人员利用加速器硬件(例如GPU)来补充高性能中央处理器(CPU)。它更切近汽车实际运行的计算平台,如果您有机会拿到 AVA 开发平台,可以按照以下步骤操作 Yocto-EWAOL 的环境到 AVA 环境。


AVA Developer Platform:

https://docs.ipi.wiki/COMHPC/ava/index.html


a). 设置 AVA 符合 SOAFEE 规范的 Yocto-EWAOL 环境:


Yocto and EWAOL 是 ARM SOAFEE 规范的一种实现,请按照指南内容设置 AVA Developer Platform,限于篇幅,这里不做细节介绍。


Yocto :

https://www.yoctoproject.org

EWAOL:

https://gitlab.arm.com/ewaol/meta-ewaol

指南:

https://docs.ipi.wiki/COMHPC/ava/YoctoInstallation.html


b). 登录创建 Greengrass 核心设备:


SSH 登录 AVA 控制终端,用户名 root,密码为空。

按照“二,部署SOAFEE规范的云端Graviton实例环境”部分, 步骤 e) Pull Greengrass docker 镜像, f) 创建Greengrass 核心设备。



注意将 thing-name 修改,以区分云端 EC2 的 Greengrass 核心设备。


java -Droot="/greengrass/v2" -Dlog.store=FILE \
  -jar ./GreengrassInstaller/lib/Greengrass.jar \
  --aws-region cn-north-1 \
  --thing-name MySOAFEE-Edge-GreengrassCore \
  --thing-group-name MySOAFEE-Edge-GreengrassCoreGroup \
  --thing-policy-name GreengrassV2IoTThingPolicy \
  --tes-role-name GreengrassV2TokenExchangeRole \
  --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias \
  --component-default-user ggc_user:ggc_group \
  --provision true \
  --setup-system-service true


左滑查看更多



创建成功后在 IoT Core 控制台看到新创建的 Greengrass 核心设备。



树莓派是一种低成本嵌入式单板计算机,具有基于 ARM 的集成 CPU。就本文章而言,如果您没有 AVA 开发平台,它可以作为我们介绍的车云环境对等概念的快速开发验证目标。


a). 设置树莓派 4B 符合 SOAFEE 规范的 Yocto-EWAOL 的环境:


请按照 workshop (https://catalog.us-east-1.prod.workshops.aws/workshops/12f31c93-5926-4477-996c-d47f4524905d/en-US/10-getting-started/setup-rpi 的内容设置树莓派 4B,限于篇幅,这里不做细节介绍。


b). 创建 Greengrass 核心设备:


SSH 登录树莓派的控制终端,用户名:root ,密码:aws_workshop。


按照“二,部署 SOAFEE 规范的云端 Graviton 实例环境” 步骤e) Pull Greengrass docker 镜像, f) 创建Greengrass 核心设备。


注意将 thing-name 修改,以区分云端 EC2 的 greengrass 核心设备。


其它操作和 AVA 平台一样。


java -Droot="/greengrass/v2" -Dlog.store=FILE \
  -jar ./GreengrassInstaller/lib/Greengrass.jar \
  --aws-region cn-north-1 \
  --thing-name MySOAFEE-Edge-GreengrassCore \
  --thing-group-name MySOAFEE-Edge-GreengrassCoreGroup \
  --thing-policy-name GreengrassV2IoTThingPolicy \
  --tes-role-name GreengrassV2TokenExchangeRole \
  --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias \
  --component-default-user ggc_user:ggc_group \
  --provision true \
  --setup-system-service true


左滑查看更多


触发 CI/CD 流水线,

车云对等环境运行 YOLO-V6 应用


这个部分将演示提交 YOLO-V6 应用代码,CodeBuild 的构建配置文件,提交到 CodeCommit 并触发 CodePipleline 流水线,构建 YOLO-V6 Docker 镜像,推送到 ECR。Manual Approve 后,通过 IoT Core,Greengrass 部署 YOLO-V6 应用到云端环境,测试及验证。最后,Manual Approve 后,部署到车边缘环境进行测试。


第一部分,云端 EC2 对等环境部署、测试:


a). 将 build file, YOLO-V6 应用代码,推理图片复制到 yolo-v6-application 本地 repository:


git clone https://git-codecommit.cn-north-1.amazonaws.com.cn/v1/repos/yolo-v6-application
cp -r ~/aws-automotive-soafee-env-parity-blog /yolo_v6_image_src /* ~/yolo-v6-application/


左滑查看更多


b). 提交代码,触发流水线:


CodeCommit 用户名,密码可以到 IAM, Users, Security Credentials, HTTPS Git credentials for Amazon CodeCommit 获取。


cd ~/yolo-v6-application
git add .
git commit -m "First commit yolo v6 sample application."
git push


左滑查看更多


c). 构建 YOLO-V6 应用镜像,推送到 ECR:




d). 在 CodePipeline 中 Manual Approval 中 approve, 将 YOLO-v6 部署到云端 EC2 SOAFEE 环境。


这个过程将 YOLO-v6 的 Docker 镜像构为建 Greengrass 的 Component,通过 IoT Core 将 Component 部署到 EC2 中。确保“二,部署 SOAFEE 规范的云端 Graviton 实例环境”部分中的 Greengrass 在正常运行。在 IoT Core 中查看部署的状态。




e). 部署成功之后,登录到 EC2 控制端,验证 YOLO-v6 应用。


查看新的 YOLO-v6 镜像是否已经 pull 到 EC2。



运行命令运行 YOLO-v6 应用,它将执行图片推理的操作,并把推理结果保存在 EC2 host 主机的 ~/predictions 文件夹下:


docker run -v ~/predictions:/home/YOLOv6/runs 501234xxxxxx.dkr.ecr.cn-north-1.amazonaws.com.cn/yolo-v6-application:latest


左滑查看更多




将图片从 EC2 中 scp 命令或者 SFTP 客户端将推理后的图片下载到本地电脑查看。



第二部分,车端对等环境部署、测试:


a). 在 CodePipeline 的 Manual Approval  中 approve, 将 YOLO-v6 部署到边缘端 SOAFEE 环境。


确保“二,部署 SOAFEE 规范的云端 Graviton 实例环境”部分的 Greengrass 在正常运行。在 IoT Core 中查看部署的状态。




b). 部署成功之后,登录到车边缘设备控制端,验证 YOLO-v6 应用。


我们这里以 AVA 操作为例,树莓派操作步骤一致。


打开另外一个 scp 客户端,登录 AVA 平台,查看刚刚部署的 YOLO-v6 docker 应用镜像。



运行命令运行 YOLO-v6 应用,它将执行图片推理的操作:


docker run -v ~/predictions:/home/YOLOv6/runs 501234xxxxxx.dkr.ecr.cn-north-1.amazonaws.com.cn/yolo-v6-application:latest


左滑查看更多



在 ~/predictions 文件夹下找到推理后的照片,如云端 EC2 中的操作一样,可以将其 scp 下载到本地电脑查看。




清理环境


演练结束之后,请将相关服务资源关闭。


在 aws-automotive-soafee-env-parity-blog 文件夹下执行命令清理 cdk 创建的资源:


cdk destroy


在 EC2 的控制台中 Terminate EC2实例。



总结

在本文中,我们按步骤介绍了如何在亚马逊云科技云上构建基于 SOAFEE 开放架构及云原生概念的软件定义汽车的方案。包括构建云端符合 SOAFEE 规范基于 Amazon Graviton 实例的环境,及构建车边缘端符合 SOAFEE 规范的 AVA 平台及树莓派对等环境。并使用亚马逊云科技原生的 DevOps CI/CD 工具链,实现云端构建应用,云端环境运行、测试,车端对等硬件环境运行、测试,实现了车云环境对等的云原生软件开发流程。



参考资料


Getting Started with Cloud-Native Automotive Software Development:

https://catalog.us-east-1.prod.workshops.aws/workshops/12f31c93-5926-4477-996c-d47f4524905d/en-US


本篇作者



高业坤

亚马逊云科技专业服务团队 IoT 架构师。负责基于 Amazon IoT 的解决方案咨询、架构与交付,深度参与过智慧工厂等行业的 IoT 解决方案的咨询与交付。在智能家居、智慧安防等 IoT 行业拥有十年以上软件研发管理经验。


李焱

亚马逊云科技专业服务团队企业服务经理,有20年的从业经验,担任过软件工程师、解决方案经理、业务拓展经理等不同角色,有丰富的汽车行业解决方案与业务拓展经验,目前负责软件定义汽车解决方案的设计与业务推广。


点击上方【立即报名】

直通大咖云集的亚马逊云科技中国峰会!


听说,点完下面4个按钮

就不会碰到bug了!


文章转载自亚马逊云开发者,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论