帮助文档 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
帮助文档 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 函数计算 FC 2.0
  4. 实践教程
  5. 基于函数计算和TensorFlow的Serverless AI推理

基于函数计算和TensorFlow的Serverless AI推理

  • 实践教程
  • 发布于 2025-04-16
  • 0 次阅读
文档编辑
文档编辑

您可以通过Serverless Devs开发工具快速将AI推理类的应用部署到函数计算控制台,从而实现按需、自动扩展的AI模型推理,无需管理底层基础设施,节省成本并快速迭代。

背景信息

本文示例实现的能力是识别上传的照片内的动物是猫还是狗。关于代码详情,请参见示例工程。dog and cat

前提条件

  • 开通函数计算。建议您使用按量付费的方式购买函数计算。详细信息,请参见开通服务和按量付费。

  • 开通存储服务NAS。关于存储服务NAS的计费信息,请参见入门概述和通用型NAS计费。

  • 安装Serverless Devs工具及依赖。

  • 配置Serverless Devs。

操作步骤

  1. 执行以下命令,克隆项目。

    git clone https://github.com/awesome-fc/cat-dog-classify.git
  2. 安装依赖。

    1. 执行以下命令进入项目目录。

      cd cat-dog-classify
    2. 执行以下命令安装依赖。

      sudo s build --use-docker

      输出示例:

      [2021-12-09 07:26:39] [INFO] [S-CLI] - Start ...
      [2021-12-09 07:26:40] [INFO] [FC-BUILD] - Build artifact start...
      [2021-12-09 07:26:40] [INFO] [FC-BUILD] - Use docker for building.
      [2021-12-09 07:26:40] [INFO] [FC-BUILD] - Build function using image: registry.<regionId>.aliyuncs.com/aliyunfc/runtime-python3.6:build-1.9.20
      [2021-12-09 07:26:40] [INFO] [FC-BUILD] - begin pulling image registry.<regionId>.aliyuncs.com/aliyunfc/runtime-python3.6:build-1.9.20, you can also use docker pull registry.cn-beijing.aliyuncs.com/aliyunfc/runtime-python3.6:build-1.9.20 to pull image by yourself.
      build-1.9.20: Pulling from aliyunfc/runtime-python3.6
      f49cf87b52c1: Already exists
      ......
      01ce50b4eb85: Already exists
      02b807385deb: Pull complete
      ......
      9b9fdb8de506: Pull complete
      Digest: sha256:a9a6dab2d6319df741ee135d9749a90b2bb834fd11ee265d1fb106053890****
      Status: Downloaded newer image for registry.<regionId>.aliyuncs.com/aliyunfc/runtime-python3.6:build-1.9.20
       builder begin to build
      [2021-12-09 07:27:57] [INFO] [FC-BUILD] - Build artifact successfully.
      
      Tips for next step
      ======================
      * Invoke Event Function: s local invoke
      * Invoke Http Function: s local start
      * Deploy Resources: s deploy
      End of method: build

    执行完安装依赖的命令后,Serverless Devs会自动安装相关依赖包,并将第三方库下载到.s/build/artifacts/cat-dog/classify/.s/python目录内。

  3. 上传依赖到NAS。

    当您在安装依赖时,函数计算引用的代码包在解压后可能会出现大于代码包限制的情况,为了减少代码包的体积,您可以将大体积的依赖和相对较大的模型参数文件存放在NAS中。

    1. 执行以下命令,初始化NAS。

      sudo s nas init

      输出示例:

      [2021-12-09 07:29:58] [INFO] [S-CLI] - Start ...
      [2021-12-09 07:29:59] [INFO] [FC-DEPLOY] - Using region: cn-shenzhen
      [2021-12-09 07:29:59] [INFO] [FC-DEPLOY] - Using access alias: default
      [2021-12-09 07:29:59] [INFO] [FC-DEPLOY] - Using accessKeyID: yourAccessKeyID
      [2021-12-09 07:29:59] [INFO] [FC-DEPLOY] - Using accessKeySecret: yourAccessKeySecret
      ......
      [2021-12-09 07:30:01] [INFO] [FC-DEPLOY] - Generated vpcConfig:
      securityGroupId: sg-wz90u1syk2h1f14b****
      vSwitchId: vsw-wz9qnuult4q5g4f7n****
      vpcId: vpc-wz9x9bzs0wtvjgt6n****
      
      ......
      [2021-12-09 07:30:15] [INFO] [FC-DEPLOY] - Checking Trigger httpTrigger exists
       Make service _FC_NAS_cat-dog success.
       Make function _FC_NAS_cat-dog/nas_dir_checker success.
       Make trigger _FC_NAS_cat-dog/nas_dir_checker/httpTrigger success.
      [2021-12-09 07:30:25] [INFO] [FC-DEPLOY] - Checking Service _FC_NAS_cat-dog exists
      [2021-12-09 07:30:25] [INFO] [FC-DEPLOY] - Checking Function nas_dir_checker exists
      [2021-12-09 07:30:26] [INFO] [FC-DEPLOY] - Checking Trigger httpTrigger exists
      
      There is auto config in the service: _FC_NAS_cat-dog
      [2021-12-09 07:30:26] [INFO] [FC-DEPLOY] - Generated nasConfig:
      groupId: 10003
      mountPoints:
        - fcDir: /mnt/auto
          nasDir: /cat-dog
          serverAddr: 2bfb748****.cn-shenzhen.nas.aliyuncs.com
      userId: 10003
      
      cat-dog:
        userId:      10003
        groupId:     10003
        mountPoints:
          -
            serverAddr: 2bfb748****.cn-shenzhen.nas.aliyuncs.com
            nasDir:     /cat-dog
            fcDir:      /mnt/auto
    2. 执行以下命令,部署服务。

      sudo s deploy service
    3. 执行以下命令,上传依赖到NAS。

      sudo s nas upload -r .s/build/artifacts/cat-dog/classify/.s/python/ /mnt/auto/python

      输出示例:

      [2021-12-09 07:33:14] [INFO] [S-CLI] - Start ...
      Packing ...
      Package complete.
       Upload done
      
      Tips for next step
      ======================
      * Invoke remote function: s invoke
      End of method: nas
    4. 执行以下命令,上传模型到NAS。

      sudo s nas upload -r src/model/ /mnt/auto/model

      输出示例:

      [2021-12-09 07:52:26] [INFO] [S-CLI] - Start ...
      Packing ...
      Package complete.
       Upload done
      
      Tips for next step
      ======================
      * Invoke remote function: s invoke
      End of method: nas
    5. 执行以下命令,查看NAS目录。

      sudo s nas command ls /mnt/auto/

      输出示例:

      [2021-12-09 07:53:01] [INFO] [S-CLI] - Start ...
      model
      python
      
      
      Tips for next step
      ======================
      * Invoke remote function: s invoke
      End of method: nas
  4. 执行以下命令,部署项目。

    sudo s deploy

    输出示例:

    [2021-12-09 07:56:15] [INFO] [S-CLI] - Start ...
    [2021-12-09 07:56:16] [INFO] [FC-DEPLOY] - Using region: cn-shenzhen
    [2021-12-09 07:56:16] [INFO] [FC-DEPLOY] - Using access alias: default
    [2021-12-09 07:56:16] [INFO] [FC-DEPLOY] - Using accessKeyID: yourAccessKeyID
    [2021-12-09 07:56:16] [INFO] [FC-DEPLOY] - Using accessKeySecret: yourAccessKeySecret
     ......
    [2021-12-09 07:56:19] [INFO] [FC-DEPLOY] - Generated logConfig:
    enableInstanceMetrics: true
    enableRequestMetrics: true
    logBeginRule: ~
    logstore: fc-service-cat-dog-logstore
    project: 188077086902****-cn-shenzhen-logproject
    ......
    There is auto config in the service: cat-dog
    
    Tips for next step
    ======================
    * Display information of the deployed resource: s info
    * Display metrics: s metrics
    * Display logs: s logs
    * Invoke remote function: s invoke
    * Remove Service: s remove service
    * Remove Function: s remove function
    * Remove Trigger: s remove trigger
    * Remove CustomDomain: s remove domain
    
    
    
    cat-dog:
      region:   cn-shenzhen
      service:
        name: cat-dog
      function:
        name:       classify
        runtime:    python3
        handler:    predict.handler
        memorySize: 1024
        timeout:    120
      url:
        system_url:    https://188077086902****.cn-shenzhen.fc.aliyuncs.com/2016-08-15/proxy/cat-dog/classify/
        custom_domain:
          -
            domain: http://classify.cat-dog.188077086902****.cn-shenzhen.fc.devsapp.net
      triggers:
        -
          type: http
          name: httpTrigger

    成功部署该项目后,您可以在执行输出中查看到函数计算生成的临时域名,通过该域名可以访问刚部署的函数。生成的域名的格式为:http://classify.cat-dog.<account_id>.<region_id>.fc.devsapp.net。

    使用浏览器访问该域名,上传图片后识别到的结果如下:cat-dogserverless devs

    说明 临时域名仅用作演示以及开发,具有时效性。如需用作生产,请绑定已经在阿里云备案的域名。详细信息,请参见配置自定义域名。

使用预留消除冷启动毛刺

函数计算具有动态伸缩的特性,根据并发请求量,自动弹性扩容出执行环境。在这个典型的深度学习示例中,加载依赖和模型参数消耗的时间很长,在您设置的1 GB规格的函数中,并发访问的时间为10s左右,有时可能大于20s。

因此不可避免的会出现函数调用毛刺的情况,即冷启动时间大于10s,在这种情况下,您可以使用设置预留的方式来避免冷启动。您可以在项目目录内执行以下命令消除冷启动毛刺:

sudo s provision put --target 10 --qualifier LATEST

同时,当您需要了解服务器的最大承受能力,实现更好地运行和开发时,您可以使用Serverless Devs的压测命令对指定的函数进行压测。详细信息,请参见Serverless Devs常用命令。

重要
  • 您可以通过以下命令获取预留实例详情:

    sudo s provision get --qualifier LATEST
  • 当您完成压测后,请执行以下命令取消预留:

    sudo s provision put --target 0 --qualifier LATEST

相关文档

  • 通过Serverless Devs工具进行函数构建/依赖安装等操作,请参见构建函数或安装依赖(s build)。

  • 通过Serverless Devs工具进行预留配置的查看与更新等操作,请参见函数预留操作(s provision)。

相关文章

低成本跨境文件传输 2025-04-16 14:22

本文介绍如何通过OSS加速域名,配合函数计算和云工作流,快速打造低成本、高效的跨境对象存储数据同步传输系统。

使用函数计算实现网站的文件处理 2025-04-16 14:22

本文介绍如何通过函数计算实现文件管理网站的功能,例如自动解压文件、自动打包压缩、自动处理图片分辨率等。 应用场景 某图片网站数据管理主要

使用函数计算搭建前端CICD系统 2025-04-16 14:22

本文介绍通过函数计算搭建前后端分离架构下的前端静态资源部署服务。 背景信息 企业一般使用GitLab托管前端代码,搭建Jenkins监听

智能家电利用函数计算获取天气信息 2025-04-16 14:22

本文介绍使用函数计算,结合阿里云IoT物联网平台,实现IoT设备获取天气信息的最佳实践。 应用场景

函数计算冷启动优化最佳实践 2025-04-16 14:22

本文介绍如何通过设置函数计算的预留模式实例优化按量模式实例的冷启动和函数性能。 什么是冷启动

异步任务最佳实践 2025-04-16 14:22

异步任务可以实时感知业务状态、控制执行函数,让您对一些异常情况进行更好的处理,例如报警通知、自动化重试等情况。本文介绍函数计算异步任务的最佳实践。 背景信息

目录
Copyright © 2025 your company All Rights Reserved. Powered by 博智数字服务平台.
闽ICP备08105208号-1