文章推荐语:“在刚刚结束的 2020 年,有幸参与到了一次 AWS 的社区活动中,在这次活动上第一次听到了宇博的分享《云计算,开源与社区》,带给了我非常多的思考和启发,在活动结束后我就邀请宇博能不能写一篇文章跟社区的开发者分享一下 AWS 与开源相关的一些内容,宇博在百忙之中写了如下的文章,这篇文章对于开发者了解 AWS 参与开源以及最新的产品中用到了哪些开源技术会有很大的帮助。也欢迎社区的开发者,一起多参与到 AWS 和思否的社区活动中,一起交流分享云计算与开源技术。”— SegmentFault 思否 CEO 高阳。
图拍摄于 AWS Community Day Shanghai 2020
本文作者:王宇博
作者简介:王宇博是 AWS 资深开发者布道师,负责 AWS 技术与产品在开发者中的布道与推广。此前曾担任 AWS 高级产品经理多年,负责 AWS 计算、数据和人工智能相关产品和解决方案的业务拓展。在加入 AWS 之前,他曾在多家跨国企业担任产品、技术和管理等岗位,具有近 15 年的 IT 行业的经验和实践;在计算机视觉、模式识别和机器学习等领域也有多年的科研工作经历。
从 re:Invent 看 AWS 对开源和社区的新贡献
从 2006 年提供第一个云服务开始,AWS 一直是开源社区的重要参与者
和支持者,贡献涵盖代码、运营、基础等诸多方面。除了构建的 2500 多个 GitHub 存储库之外,我们还参与了数千个第三方开源项目,并培育起数十万人的开源社区。
图1: AWS 对开源的贡献逐年增加
AWS 作为一家云计算厂商,在开源领域采取了更佳平衡和务实的方法,吸引众多员工、客户和合作伙伴参与和贡献到开源项目。我们在开源领域的驱动力来自于最终用户,聚焦于为开发者提供更好的工具。当我们发布基于开源项目的云服务时,我们会做出长期承诺以支持我们的客户,向开源项目提供了错误修复,安全性,可伸缩性,性能和功能增强并且采用“上游优先”的策略,使得我们在 Linux,Xen,Kubernetes,Redis,Rust,Redis,GraphQL,ROS 等社区中赢得了领导地位。与此同时,我们还代表客户进行创新,并还发起了众多开源项目,例如 Apache MXNet, FireCracker,Bottlerocket,PartiQL,Amazon Corretto,Open Distro for ElasticSearch,AWS Distro for Open Telemetry 等,让开发者更容易的从专有技术转移到开源技术并作出贡献。另外,我们也积极参与到客户发起的开源项目中,比如 Netflix的Spinnaker 等。我们也持续与一些领先的开源 ISV 合作,包括 MongoDB、Databricks 和 Redis Labs 等,帮助他们构建和优化云服务。
图2: AWS参与的一些开源项目
图3: AWS发起的一些开源项目
在刚刚结束的 AWS re:Invent 2020 中,在众多的新发布中,又有一系列关于开源和社区的新贡献。在这里我们集中从开发者更为关心的 DevOps,数据与分析,和机器学习与边缘计算等三个方面来给大家做一下介绍。
首先我们来看一下 DevOps。
谈到 DevOps,我们首先就会想到容器和 Kubernetes,它们成为了 DevOps 工具落地的新一代基础架构。Amazon Elastic Kubernetes Service (EKS) 为众多开发者提供了操作安全、稳定可靠的托管Kubernetes云服务,但是也有很多开发者由于各种原因只能在本地运营 Kubernetes。为了同样帮助这些开发者不把精力耗费在管理 Kubernetes 基础架构的大量繁重工作,我们发布了开源的 Amazon EKS Distro。它是Amazon EKS 所使用的 Kubernetes 发行版,可以帮助您在任何地方手动运行 Kubernetes 集群,包括 Amazon EC2 上、其他云中以及本地硬件。EKS Distro 包括上游开源 Kubernetes 组件和第三方工具,包括创建集群所需的配置数据库、网络和存储组件,其中有Kubernetes 控制平面组件(kube-controller-manager、etcd 和 CoreDNS)和 Kubernetes 工作节点组件(kubelet、CNI 插件、CSI Sidecar 映像、Metrics Server 及 AWS-IAM-authenticator)等。
同时,我们也提供了一个全新的 Kubernetes 部署选项 Amazon EKS Anywhere。Amazon EKS Anywhere 基于 Amazon EKS Distro 创建集群,可以让您在本地轻松创建及操作 Kubernetes 集群,包括在您自己的虚拟机和裸机服务器上。EKS Anywhere 提供可在本地创建和操作 Kubernetes 集群的可安装软件包,并提供用于集群生命周期支持的自动化工具。
有了这两个全新发布,可以说在 Kubernetes 领域,AWS 为开发者提供了跨本地和云的相同的使用和运营体验。
图4: Kubernetes跨本地和云的相同运营体验
持续的可观测性是 DevOps 流水线的关键组件,可观测性三大支柱包括跟踪、日志记录和指标,而这些需要作为一套统一的集成工具,使每位开发者都能在一个地方查看所有观测数据。在 re:Invent 2020 中,AWS 全新推出了三种开源解决方案,以便在云中集成更好的可观测性。首先是 AWS Distro for OpenTelemetry,它是一个安全、生产就绪、由 AWS 支持的 OpenTelemetry 项目发行版,可用于在 EC2、Lambda 和 AWS 容器服务上运行的应用以及本地应用,将相关指标和跟踪发送到多个云原生和开源监控组件。其次是 Amazon Managed Service for Prometheus (AMP) 。Prometheus 是一种流行的开源监控和警报解决方案,针对容器环境进行了优化。尽管在 AWS 上部署单个 Prometheus 服务器很容易,但可能需要长达数周的手动工作才能跨多台服务器进行扩展,并配置环境以获得高可用性。需要更多容量的客户必须部署其他开源项目,如 Thanos 和 Cortex,并投入更多工程工作来优化内存和存储等资源,以控制成本和优化查询重新响应时间。借助 AMP 托管服务,您可以使用与开源 Prometheus 相同的数据模型和查询语言来监视容器化工作负载的性能,并获得改进的可扩展性、可用性和安全性,而无需管理底层基础架构。再次是 Amazon Managed Service for Grafana (AMG)。AMG 基于开源的 Grafana 项目,是一项完全托管的服务,具有丰富的交互式数据可视化,可帮助客户分析,监视多个数据源中的指标,日志和跟踪并对其发出警报。 您可以创建交互式仪表板,并使用自动缩放,高度可用且企业级安全的服务。至此,AWS 已经在其云服务中提供了完备的云原生和开源持续观测解决方案,为开发者构建DevOps 提供了更多的选择。
图5: 云原生和开源持续观测解决方案
接下来,我们再来看一下数据与分析。
在数据库领域,PostgreSQL 一直是开发者的热门选择。许多开发者喜欢PostgreSQL 的一个原因是它是完全由社区驱动的。但是向PostgreSQL迁移却不容易,因为数据库迁移的最大阻碍其实是惯性。无论出于何种原因想要迁移到 PostgreSQL,开发者都希望有一种更简单的方法来实现。基于此,AWS 在 re:Invent 2020 中发布了开源的 Babelfish for PostgreSQL。Babelfish 是 PostgreSQL 的 Microsoft SQL Server 兼容端点,以使 PostgreSQL 能够熟练地理解 SQL Server 应用的数据库请求,包括理解 T-SQL 和 TDS 通信协议。使用 Babelfish,几乎没有代码更改,也不需要更改数据库驱动,就可以帮助更多的开发者向 PostgreSQL 进行方便的迁移。我们将于 2021 年正式开源 Babelfish。在此之前,您可以在 Amazon Aurora 的预览版中使用 Babelfish 来查看其工作原理。
图6: Babelfish的工作原理
AWS Glue Elastic Views 是 AWS Glue 的一个新功能,使您可以轻松地构建物化视图,从而在多个数据存储中合并和复制数据,而无需编写自定义代码。Glue Elastic Views 使用了 AWS 的开源项目PartiQL,它在包含结构化,半结构化和嵌套数据的多个数据存储区中提供与SQL兼容的统一查询访问。 PartiQL 将查询的语法和语义与基础数据源和数据格式分开。 它使用户可以使用或不使用常规模式与数据进行交互。 另外,在 Amazon DynamoDB 的新发布中,我们也提供了使用 PartiQL 查询,插入,更新和删除表数据的支持。
Amazon Neptune ML 是图数据库 Neptune 的一个新功能,它使用图形神经网络(GNNs),进行简单、快速和更精确的预测。与使用非图形方法进行预测相比,使用 Neptune ML 可以将大多数图形预测的精度提高50%以上。在 Amazon Neptune ML 背后,使用的是 AWS 提供的开源库 Deep Graph Library,它是由 AWS 上海人工智能研究院主导开发的一个开源项目。
Apache Airflow 是构建批处理数据工作流的开源项目,用于管理日益复杂的数据管理工具、脚本和分析工具。Amazon Managed Workflows for Apache Airflows (MWAA) 是一项托管的 Apache Airflow 服务,使您无需再管理,配置和扩展 Airflow 环境,即可编排数据处理工作流,并通过 AWS 支持的日志和监控功能来管理其执行。 您可以在Amazon MWAA 上运行现有的 Airflow 工作流程,并使用 AWS 控制台,API 和命令行界面(CLI)以编程方式与其环境进行交互,同时花费更少的时间来管理基础架构和 Airflow 环境。
最后我们再看一下机器学习与边缘计算。
深度学习中的图像分类和自然语言处理等应用场景对计算能力和数据集的要求越来越高,例如,2018 年发布的 BERT 使用了 3.4 亿个参数。现在,更先进模型如 T5、GPT-3、Turing-NLG 和 Megatron 已经创造了新的精度记录,但需要数百亿到数千亿的参数。如果手动实施数据和模型并行策略进行分布式训练,可能需要数周的实验,会减慢将新版本迭代部署到生产中的能力。在 re:Invent 2020 的发布中,AWS 在 Amazon SageMaker 中提供了全新的托管分布式训练,为训练大型模型和数据集提供了更快、更简单的方法。SageMaker 分布式训练使用分区算法,可在 AWS GPU 实例间自动拆分模型和训练数据集,实现了数据并行和模型并行两种技术。数据并行的分布式训练的使用相对较多,其中AllReduce 是一项关键操作,并有多种的开源实现,如 Horovod。在 SageMaker 分布式训练中,SageMaker Distributed Data Parallel (SDP) 托管实现了优化的 AllReduce;同时充分利用 AWS 的网络基础架构和Amazon EC2 实例拓扑来执行优化的节点到节点通信,极大提升了分布式训练的性能。使用 p3dn.24xlarge 实例上的 2、4 和 8 个节点群集对 BERT 进行分布式训练, PyTorch-SDP 比 PyTorch-DDP 快41%,52% 和 13%;对 MaskRCNN 进行分布式训练,PyTorch-SDP比 PyTorch-DDP 快 4%,19% 和 15%。具体结果如下表所示,其训练代码位于 amazon-sagemaker-examples。
图7: SageMaker data parallelism vs. PyTorch DDP
另外,越来越多的应用,如工业自动化、自动驾驶,需要运行在边缘设备上的机器学习模型,以便在新数据可用时实时进行预测。新发布的Amazon SageMaker Edge Manager 可以帮助开发人员优化、保护、监控和维护部署在边缘设备集群上的机器学习模型。模型部署到边缘设备以后,仍然需要管理和监控模型,确保它们持续以高精度运行。当模型的准确性随着时间的推移而下降时,开发人员可以重新训练模型,不断提高模型的质量。 SageMaker Edge Manager 使用 Amazon SageMaker Neo 针对不同的硬件平台进行优化。其背后是开源的 Apache TVM 的编译器和开源的 Neo-AI 运行时,目前支持基于Ambarella,ARM,Intel,NVIDIA,NXP,Qualcomm,TI 和 Xilinx 制造的芯片的设备。
AWS 在 2016 年推出了AWS IoT Greengrass ,将 AWS IoT 扩展到边缘设备上。AWS Greengrass 有两个主要部分:IoT 边缘运行时和云服务。他们共同致力于为物联网设备提供本地计算,消息传递和数据管理功能。您可以使用 Greengrass 在 IoT 设备上本地运行 Lambda 函数。启用 ML 推理;在设备之间发送消息;部署,运行和管理 Docker容器等。在 re:Invent 2020 上,AWS 全新推出了 IoT Greengrass 的 2.0 版,增加了新的开发人员功能,包括改进的命令行界面以及对添加和删除预建组件的支 IoT Greengrass 2.0 版的边缘运行时已开源。
以上是在 re:Invent 2020 中与开源相关主要发布的概览。我们相信开源会为每位开发者带来好处,并致力于将开源的价值带给我们的客户,将云端卓越运营带给开源社区。当然,健康的社区对于开发者使用开源也非常重要。因此,我们不断寻求以各种不同方式增加对开源社区的支持,并加入了众多开源基金会。作为基金会的一部分,我们可以参与开源项目战略方向的设计与讨论,以帮助确保这些项目继续按照客户对我们的期望发展。同时在过去的几年时间,我们一直在各种开源会议上发言,来分享我们的开源知识和经验。
图8: AWS加入的一些开源基金会
AWS 为开发者与社区提供了广阔的舞台。AWS Heroes 项目构建起一个充满活力的,世界范围内的 AWS 专家小组,他们对知识共享的热情在社区内产生了真正的影响。目前在中国内地已经有 5 位 AWS Hero。AWS Community Builders 项目为热衷于分享知识和与技术社区互动的AWS爱好者和新兴思想领袖提供技术资源,指导和交流的机会。我们也希望更多的开发者加入到 AWS 中国开发者社区中一起进行更广泛和更深入的交流。