Serverless AI 应用初探

4 篇文章 0 订阅
3 篇文章 0 订阅

引言

Serverless在AI方面的应用至今仍然不太明朗,国内的开源组织主要集中在阿里云、腾讯云、华为云及蚂蚁集团组成的开源社区Serverless-Devs联盟,该联盟的存在旨在为开发者提供强大的工具链体系,通过Serverless-Devs,开发者不仅可以一键体验多云 Serverless 产品,极速部署 Serverless 项目,还可以在 Serverless 应用全生命周期进行项目的管理,并且非常简单快速的将 Serverless Devs 与其他工具/平台进行结合,进一步提升研发、运维效能。

 虽然当前Serverless-Devs提供了一些解决产商锁定的案例,并在其开源网站:ServerlessRegsitry开源网给出了大量的参考案例。但某些云产商的AI-Serverless教程还是远古时代的版本,CLI命令行不一致,yaml文件配置不一致:如何通过ServerlessDevs将代码部署至函数计算_函数计算-阿里云帮助中心这给AI-Serverless开发带来了重重阻力。

笔者仍然希望AI应用能够打破产商锁定壁垒,同样的应用应该在各大云产商共同运行,拥抱真正的社区统一。

AI-Serverless应用开发实践

【1】RAM权限配置

由于整个AI-Serverless应用需要访问NAS存储,在未来的教程中可能还需要访问OSS存储,对于外部存储的访问就涉及到了权限问题,故需要到阿里云访问控制台先解决权限问题,如下图所示:

 进入界面后,点击左侧菜单栏的角色,可以看到一大批关于服务权限的角色名称:

 对于函数计算,未来使用的角色都是AliyunFcDefaultRole,点击进入权限详情,添加管理所有阿里云资源权限:

 并且在右上角可以看到角色的ARN码,该ARN码非常重要,需要记住格式,特别注意自己的用户ID值。

【2】配置NAS存储

NAS存储服务需要开通,应该是免费的问题不大,需要在NAS存储服务的文件系统列表中创建文件系统,并添加挂载点,这个挂载点需要通过VPC与Serverless函数服务绑定到一起,在【挂载使用】子菜单可以查看需要在s.yaml文件中配置的serverAddr:

 

 【3】编写代码

前期准备:安装Serverless-Devs开发者工具(需要先安装最新版本nodejs、npm)

#!/bin/bash
# 安装更新Node.js和Npm所需要的软件
echo "update apt packge ..."
sudo apt update
# 添加NodeSource APT存储库和用于验证软件包的PGP密钥
echo "add NodeSource APT is PGP"
sudo apt install apt-transport-https curl ca-certificates software-properties-common
echo "add apt-get nodejs16.x and PGP" # 该行命令完成了apt-get存储库的添加并添加了PGP密钥
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
echo "install nodejs and npm...." # 安装Node
sudo apt-get install -y nodejs

# 安装Serverless-Devs
npm install @serverless-devs/s -g

首先从代码仓库拉取代码

GitHub - awesome-fc/cat-dog-classify: Cat Dog Image ClassifierCat Dog Image Classifier. Contribute to awesome-fc/cat-dog-classify development by creating an account on GitHub.https://github.com/awesome-fc/cat-dog-classify.git接着修改s.yaml文件

edition: 1.0.0          #  命令行YAML规范版本,遵循语义化版本(Semantic Versioning)规范
name: cat-dog     #  项目名称
access: "default" 

services:
  cat-dog: #  服务名称
    component: devsapp/fc  # 组件名称
    props: #  组件的属性值
      region: cn-shenzhen
      service:
        name: cat-dog
        description: 'The service for classifying cats and dogs'
        internetAccess: true
        role: 'acs:ram::xxxx:role/aliyunfcdefaultrole'  #xxx替换成自己阿里云账号的用户ID,或者在角色aliyunfcdefaultrole里面看
        nasConfig:
          userId: 10003
          groupId: 10003 
          mountPoints:
            - serverAddr: xxxxx.cn-shenzhen.nas.aliyuncs.com  # 在上文的图里面看
              nasDir: /ai-fn   # NAS文件系统里面的路径
              fcDir: /mnt/auto  # 函数虚拟目录的名称,绑定到nasDir
        vpcConfig: auto
        logConfig: auto
      function:
        name: classify
        description: classify the cats and dogs
        runtime: python3
        codeUri: ./src
        handler: predict.handler
        initializationTimeout: 300
        initializer: predict.initializer
        memorySize: 1024
        timeout: 120
        environmentVariables:
          PYTHONUSERBASE: /mnt/auto/python
          model_path: /mnt/auto/model
      triggers:
        - name: httpTrigger
          type: http
          config:
            authType: anonymous
            methods:
              - GET
              - POST
              - PUT
      customDomains:
        - domainName: auto
          protocol: HTTP
          routeConfigs:
            - path: /*
              methods:
                - GET
                - POST
                - PUT

 需要注意的是,由于使用到了TensorFlow1.31,故最高支持的python版本应该为3.6,所以需要使用Anaconda虚拟出一个python3.6的环境,具体方法请自行CSDN搜索。

# 构建镜像
s build
# 初始化NAS服务
s nas init
# 上传模型数据到NAS供AI服务使用
## 上传依赖包
s nas upload -r .s/build/artifacts/cat-dog/classify/.s/python/ /mnt/auto/python
## 上传模型
s nas upload -r src/model/ /mnt/auto/model
## 查看NAS目录文件
s nas command ls /mnt/auto/
## 部署项目
s deploy

完成项目部署后,可以在控制台看到打印的system_url和custom_domain,在浏览器输入URL即可进行测试,如图所示:

 进一步的,我们可以尝试使用POSTMan来发送请求测试AI-serverless。

anyway,整体上一个AI-Serverless应用就完成了。从整体上来看,当前的云服务厂商的产商锁定还是比较严重的,特别是RAM权限问题,这个ARN码问题必须要解决,个人的建议是直接添加根权限到FC默认角色当中。对于AI应用而言,由于具有大量的数据依赖项,故NAS存储、OSS存储两类服务是必不可少的,当前如《Serverless架构下的AI应用开发:入门、实战与性能优化》一书,采用的AI-Serverless应用框架主要是Flask整合AI应用,腾讯云默认的HTTP函数Python运行时版本使用的框架也是Flask,故Flask、express等轻量级框架在Python、Nodejs为主要运行时的Serverless时代中可以大放异彩。此外,Serverless-Devs给出的跨云服务产商解决方案是一个有潜力的研究方向。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值