Serverless 架构下的 AI 应用开发

本文涉及的产品
函数计算FC,每月15万CU 3个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: CI/CD 是一种通过在应用开发阶段引入自动化流程以频繁向客户交付应用的方法,CI/CD 的核心概念是持续集成、持续交付和持续部署。

bernardo-lorena-ponte-GcBKr7Nk60w-unsplash.jpg
本篇内容连载自《Serverless 架构下的 AI 应用开发:入门、实战与性能优化》


Serverless架构与CI/CD工具的结合


CI/CD 是一种通过在应用开发阶段引入自动化流程以频繁向客户交付应用的方法。如图所示,CI/CD 的核心概念是持续集成、持续交付持续部署


作为一个面向开发和运营团队的解决方案,CI/CD 主要针对集成新代码时所引发的问题。具体而言,CI/CD 可以让持续自动化和持续监控贯穿于应用的整个生命周期(从集成、测试阶段到交付和部署阶段)。这些关联的事务通常被统称为“CI/CD管道”,由开发和运维团队以敏捷方式协同支持。


CI/CD的概念与内容简图


在Serverless架构下,通常会有很多函数构成一个完整的功能或服务,这种比较细粒度的功能往往会给后期项目维护带来极大的不便,包括但不限于函数管理、项目的构建、发布层面等的不便。此时在Serverless架构中,CI/CD就显得尤为重要。更加科学、安全的持续集成和部署过程不仅会让整体的业务流程更加规范,也会在一定程度上降低人为操作、手工集成部署所产生错误的概率,同时也会大规模减轻运维人员的工作负担。


如果想要通过CI/CD平台,科学且方便地进行Serverless应用的持续集成、交付和部署,通常情况下我们需要借助相应的开发者工具,例如 Serverless Framework、Serverless Devs 等。Serverless开发者工具配置到CI/CD平台的流程可以简化为下图。


Serverless开发者工具配置到CI/CD平台的流程


1.与GitHub Action的集成


在GitHub Action的Yaml文件中,增加Serverless Devs相关下载、配置以及命令执行相关内容。例如,在GitHub仓库中创建文件.github/workflows/publish.yml,文件内容如下:

name: Serverless Devs Project CI/CD
on: 
   push: 
      branches: [ master ]
jobs: 
    serverless-devs-cd: 
        runs-on: ubuntu-latest 
        steps:
          - uses: actions/checkout@v2 
          - uses: actions/setup-node@v2 
              with: 
                  node-version: 12 
                  registry-url: https://registry.npmjs.org/ 
          - run: npm install
          - run: npm install -g @serverless-devs/s
          - run: s config add --AccountID ${{secrets.AccountID}} --AccessKeyID
             ${{secrets.AccessKeyID}} --AccessKeySecret ${{secrets.AccessKeySecret}} -a default
          - run: s deploy

与GitHub Action集成主要包括以下几部分内容。


  • 通过NPM安装最新版本的 Serverless Devs 开发者工具:
run: npm install -g @serverless-devs/s
  • 通过config命令进行密钥等信息的配置:
run: s config add --AccountID ${{secrets.AccountID}} --AccessKeyID ${{secrets.
    AccessKeyID}} --AccessKeySecret ${{secrets.AccessKeySecret}} -a default
  • 执行某些命令,例如通过deploy命令进行项目的部署,或者通过build等命令进行项目的构建:
run: s deploy

关于密钥的配置:密钥信息是通过${{secrets.*}}获取的,此时,需要将所需要的密钥和对应的Key配置到GitHub Secrets中,例如在上面的案例中,需要AccountID、AccessKeyID、AccessKeySecret三个密钥的 Key 就可以配置相关内容。


找到GitHub Secrets页面,如图所示。


GitHub Secrets页面


创建和配置密钥信息,如图所示。


创建和配置密钥信息页面


此处配置了3对密钥,如图所示。


GitHub仓库配置密钥结果页面


2.与Gitee Go的集成


在开启Gitee Go的服务之后,在流水线的 Yaml 文件中,可以增加 Serverless Devs 的相关下载、配置以及命令执行相关内容。例如,在GitHub仓库中创建文件.github/workflows/publish.yml,文件内容如下:


name: serverless-devs
displayName: 'Serverless Devs Project CI/CD'
triggers:                                     #流水线触发器配置
   push:
       - matchType: PRECISE
           branch: master
commitMessage: ''
stages:
    - stage:
            name: deploy-stage
            displayName: 'Deploy Stage'
            failFast: false
            steps:                            #构建步骤配置
               - step: npmbuild@1             #采用NPM编译环境
                 name: deploy-step
                 displayName: 'Deploy Step'
                 inputs:                      #构建输入参数设定
                     nodeVersion: 14.15       #指定 node 环境版本为 14.15
                     goals: |                 #安装依赖,配置相关主题、部署参数并发布部署
                     node -v
                     npm -v
                     npm install -g @serverless-devs/s
                     s co nfig add --AccountID $ACCOUNTID --AccessKeyID $ACCESSKEYID --AccessKeySecret $ACCESSKEYSECRET -a default
                     s deploy


与GitHub Action集成的流程类似,与Gitee Go集成主要包括以下几部分内容。


  • 通过NPM安装最新版本的 Serverless Devs 开发者工具:
npm install -g @serverless-devs/s
  • 通过config命令进行密钥等信息的配置:
s config add --AccountID $ACCOUNTID --AccessKeyID $ACCESSKEYID --AccessKeySecret 
    $ACCESSKEYSECRET -a default
  • 执行某些命令,例如通过deploy命令进行项目的部署,或者通过build等命令进行项目的构建:
s deploy

关于密钥的配置:密钥信息是通过$*获取的,此时将所需的密钥和对应的Key配置到Gitee的环境变量管理中,例如在上面的案例中,需要AccountID、AccessKeyID、AccessKeySecret三个密钥的Key就可以配置相关内容。


找到 Gitee 的环境变量管理页面,如图所示。


Gitee的环境变量管理页面


创建和配置密钥信息,如图所示。


创建和配置密钥信息页面


此处配置了3对密钥,如图所示。


Gitee仓库完成密钥配置页面


3.与Jenkins的集成


在将Serverless Devs集成到Jenkins之前,需要先基于Jenkins官网安装并运行Jenkins。本地启动Jenkins,通过浏览器进入链接 http://localhost:8080并配置完成基础设置,之后新增凭据设置,如下图所示。


Jenkins凭据设置页面


可以根据需要,增加密钥信息。以阿里云为例,新增3个全局凭据:


  • jenkins-alicloud-account-id : 阿里云 accountId
  • jenkins-alicloud-access-key-id : 阿里云 accessKeyId
  • jenkins-alicloud-access-key-secret : 阿里云 accessKeySecret


此时,可以对自身的 Serverless Devs 项目进行完善。创建文件Jenkinsfile:

pipeline { 
    agent { 
        docker { 
            image 'maven:3.3-jdk-8' 
        } 
     }
     environment { 
         ALICLOUD_ACCESS = 'default' 
         ALICLOUD_ACCOUNT_ID = credentials('jenkins-alicloud-account-id') 
         ALICLOUD_ACCESS_KEY_ID = credentials('jenkins-alicloud-access-key-id') 
         ALICLOUD_ACCESS_KEY_SECRET = credentials('jenkins-alicloud-access-key-secret') 
     } 
     stages { 
         stage('Setup') { 
             steps { 
                 sh 'scripts/setup.sh' 
             } 
        } 
    }
}

与Jenkins集成主要内容包括以下两部分。


  • environment部分:主要是根据上面步骤配置的密钥信息,进行密钥的处理。
  • stages部分:包括sh 'scripts/setup.sh'部分,即运行scripts/setup.sh文件,进行相关内容的准备和配置。


准备scripts/setup.sh文件,只需要在项目下创建该文件即可。

#!/usr/bin/env bash
echo $(pwd)
curl -o- -L http://cli.so/install.sh | bash
source ~/.bashrc
echo $ALICLOUD_ACCOUNT_ID
s config add --AccountID $ALICLOUD_ACCOUNT_ID --AccessKeyID $ALICLOUD_ACCESS_KEY_
     ID --AccessKeySecret $ALICLOUD_ACCESS_KEY_SECRET -a $ALICLOUD_ACCESS
(cd code && mvn package && echo $(pwd))
s deploy -y --use-local --access $ALICLOUD_ACCESS

在该文件中,主要包括以下几个部分。

  • 安装最新版本的Serverless Devs开发者工具:
curl -o- -L http://cli.so/install.sh | bash


  • 通过config命令进行密钥等信息的配置:
s config add --AccountID $ALICLOUD_ACCOUNT_ID --AccessKeyID $ALICLOUD_ACCESS_
    KEY_ID --AccessKeySecret $ALICLOUD_ACCESS_KEY_SECRET -a $ALICLOUD_ACCESS
  • 执行某些命令,例如通过deploy命令进行项目的部署,或者通过build等命令进行项目构建:
s deploy -y --use-local --access $ALICLOUD_ACCESS

完成密钥配置之后,可以创建一个Jenkins流水线。该流水线的源是目标GitHub地址。接下来,就可以开始运行 Jenkins 流水线,运行结束后可得到相关的结果。


4.与云效的集成


在云效中,可以直接选择Serverless Devs开发者工具,并在自定义命令中输入以下内容:

# input your command here
npm install -g @serverless-devs/s
s config add --AccountID ${ACCOUNTID} --AccessKeyID ${ACCESSKEYID} --AccessKeySecret 
    ${ACCESSKEYSECRET} -a default
s deploy

与GitHub Action、Gitee Go以及Jenkins的配置类似,与云效集成同样主要包括3部分。


  • 安装最新版本的 Serverless Devs 开发者工具:
npm install -g @serverless-devs/s
  • 通过config命令进行密钥等信息的配置:
s config add --AccountID ${ACCOUNTID} --AccessKeyID
    ${ACCESSKEYID} --AccessKeySecret


  • 执行某些命令,例如通过deploy命令进行项目的部署,或者通过build等命令进行项目的构建:
s deploy -y


效果如图所示。


云效命令配置页面


由于在命令中引用了3个重要的环境变量:ACCOUNTID、 ACCESSKEYID、 ACCESSKEYSECRET,因此还需要在环境变量中增加图所示的类似内容。


环境变量配置页面


5. CI/CD平台集成


总结通过上面几个案例不难发现,在做自动化发布时,最核心的3个流程如下。


  • 下载工具:命令为npm install -g @Serverless-devs/s。
  • 配置密钥:命令为s config add --AccountID $ACCOUNTID --AccessKeyID $ACCESSKEYID --AccessKeySecret $ACCESSKEYSECRET -a default。
  • 项目部署:命令为s deploy。


虽然只是以GitHub Action、Gitee Go、Jenkins、云效几个工具作为案例,实际上无论哪个工具与CI/CD平台集成,上述3个核心流程都不会发生本质变化。另外,上面所列举的流程更多是在做自动化发布,在发布之前有时还需要进行一些测试和重新构建,以便根据具体的实际需要进行适当的完善。


综上所述,如果想非常简单、快速、科学地完成Serverless应用的CI/CD建设,一个完善的开发者工具是必不可少的。


Serverless Devs是一款多云开发者工具。我们可以通过该工具非常简单、快速、方便地部署AWS、阿里云、腾讯云等多个云厂商的函数计算等相关服务。同时,Serverless Devs也是一个开源项目,便于用户随时随地贡献组件、应用。


Serverless应用的可观测性


Serverless应用的可观测性被很多用户所关注。可观测性是通过外部表现判断系统内部状态的方式。在应用开发中,可观测性有助于判断系统内部的健康状况,在系统出现问题时,帮助定位问题、排查问题、分析问题;在系统平稳运行时,帮助评估风险,预测可能出现的问题。


在Serverless应用开发中,如果函数的并发度持续升高,很可能是业务推广团队业务规模迅速扩张。为了避免达到并发度限制而触发流控,开发者就需要提前提高并发度。

以阿里云函数计算为例,阿里云函数计算在可观测性层面提供了多种维度,包括Logging、Metrics以及Tracing等。如图所示:


函数计算可观测性整体图表


在控制台监控中心,我们可以查看整体的Metrics、服务级Metrics以及每个函数的Metrics,还可以看到当前函数计算的请求记录。


函数计算的请求记录


根据不同的请求记录,我们还可以查看函数计算的详细信息。


函数计算的请求详情


除了在控制台的监控中心查看函数的日志等信息,我们还可以在函数详情页面看到函数计算的详细日志信息,


函数计算的日志信息


还可以看到Tracing相关信息,如下图所示。


函数计算的Tracing相关信息




阿里云、蚂蚁集团的 4 位专家刘宇、田初东、卢萌凯、王仁达(排名不分先后)系统梳理阿里在 Serverless 架构下的 AI 经验,联袂推出新书《Serverless 架构下的 AI 应用开发:入门、实战与性能优化》


本书是关于 Serverless 架构下机器学习实战的技术书,我们希望通过简单明了的语言、真实的案例,以及开放的源代码,为读者介绍 Serverless 架构与机器学习相关的基础知识,帮助读者在 Serverless 架构下开发、上线机器学习项目。


更多内容关注 Serverless 微信公众号(ID:serverlessdevs),汇集 Serverless 技术最全内容,定期举办 Serverless 活动、直播,用户最佳实践。


相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
25天前
|
人工智能 前端开发 编译器
【AI系统】LLVM 架构设计和原理
本文介绍了LLVM的诞生背景及其与GCC的区别,重点阐述了LLVM的架构特点,包括其组件独立性、中间表示(IR)的优势及整体架构。通过Clang+LLVM的实际编译案例,展示了从C代码到可执行文件的全过程,突显了LLVM在编译器领域的创新与优势。
46 3
|
19天前
|
机器学习/深度学习 人工智能 并行计算
【AI系统】Kernel 层架构
推理引擎的Kernel层负责执行底层数学运算,如矩阵乘法、卷积等,直接影响推理速度与效率。它与Runtime层紧密配合,通过算法优化、内存布局调整、汇编优化及调度优化等手段,实现高性能计算。Kernel层针对不同硬件(如CPU、GPU)进行特定优化,支持NEON、AVX、CUDA等技术,确保在多种平台上高效运行。
71 32
|
19天前
|
存储 机器学习/深度学习 人工智能
【AI系统】计算图优化架构
本文介绍了推理引擎转换中的图优化模块,涵盖算子融合、布局转换、算子替换及内存优化等技术,旨在提升模型推理效率。计算图优化技术通过减少计算冗余、提高计算效率和减少内存占用,显著改善模型在资源受限设备上的运行表现。文中详细探讨了离线优化模块面临的挑战及解决方案,包括结构冗余、精度冗余、算法冗余和读写冗余的处理方法。此外,文章还介绍了ONNX Runtime的图优化机制及其在实际应用中的实现,展示了如何通过图优化提高模型推理性能的具体示例。
50 4
【AI系统】计算图优化架构
|
7天前
|
人工智能 Serverless API
尽享红利,Serverless构建企业AI应用方案与实践
本次课程由阿里云云原生架构师计缘分享,主题为“尽享红利,Serverless构建企业AI应用方案与实践”。课程分为四个部分:1) Serverless技术价值,介绍其发展趋势及优势;2) Serverless函数计算与AI的结合,探讨两者融合的应用场景;3) Serverless函数计算AIGC应用方案,展示具体的技术实现和客户案例;4) 业务初期如何降低使用门槛,提供新用户权益和免费资源。通过这些内容,帮助企业和开发者快速构建高效、低成本的AI应用。
49 12
|
16天前
|
机器学习/深度学习 人工智能
一个模型走天下!智源提出全新扩散架构OmniGen,AI生图进入一键生成时代
智源研究院推出OmniGen,一种全新的扩散模型,旨在克服现有图像生成模型的局限性。OmniGen能处理文本到图像、图像编辑等多任务,具备高效、简洁的架构,仅含VAE和预训练Transformer。通过大规模统一数据集X2I训练,OmniGen展现了强大的多任务处理能力和知识转移能力,适用于虚拟试穿、图像修复等多个领域。尽管如此,OmniGen在特定任务上的性能、训练资源需求及可解释性等方面仍面临挑战。
41473 20
|
4天前
|
机器学习/深度学习 存储 人工智能
基于AI的实时监控系统:技术架构与挑战分析
AI视频监控系统利用计算机视觉和深度学习技术,实现实时分析与智能识别,显著提升高风险场所如监狱的安全性。系统架构包括数据采集、预处理、行为分析、实时决策及数据存储层,涵盖高分辨率视频传输、图像增强、目标检测、异常行为识别等关键技术。面对算法优化、实时性和系统集成等挑战,通过数据增强、边缘计算和模块化设计等方法解决。未来,AI技术的进步将进一步提高监控系统的智能化水平和应对复杂安全挑战的能力。
|
22天前
|
存储 人工智能 监控
【AI系统】推理系统架构
本文深入探讨了AI推理系统架构,特别是以NVIDIA Triton Inference Server为核心,涵盖推理、部署、服务化三大环节。Triton通过高性能、可扩展、多框架支持等特点,提供了一站式的模型服务解决方案。文章还介绍了模型预编排、推理引擎、返回与监控等功能,以及自定义Backend开发和模型生命周期管理的最佳实践,如金丝雀发布和回滚策略,旨在帮助构建高效、可靠的AI应用。
85 15
|
16天前
|
弹性计算 运维 Serverless
卓越效能,极简运维,体验Serverless高可用架构,完成任务可领取转轮日历!
卓越效能,极简运维,体验Serverless高可用架构,完成任务可领取转轮日历!
存储 人工智能 自然语言处理
52 6
|
22天前
|
机器学习/深度学习 人工智能 API
【AI系统】昇腾异构计算架构 CANN
本文介绍了昇腾 AI 异构计算架构 CANN,涵盖硬件层面的达·芬奇架构和软件层面的全栈支持,旨在提供高性能神经网络计算所需的硬件基础和软件环境。通过多层级架构,CANN 实现了高效的 AI 应用开发与性能优化,支持多种主流 AI 框架,并提供丰富的开发工具和接口,助力开发者快速构建和优化神经网络模型。
37 1

相关产品

  • 函数计算