基于Serverless Devs的深度学习模型部署

本文涉及的产品
函数计算FC,每月15万CU 3个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 本文详细介绍了Serverless Devs部署AI模型的全套流程,包括serverless服务配置,本地代码调试,AI模型与依赖上传,以及最后的服务部署。通过这篇文章,您可以了解到serverless为AI部署带来的优势,轻松体验高可用分布式AI推理系统。

基于Serverless Devs的深度学习模型部署

配置

函数计算的基本配置

  1. 下载Serverless Devs开发者工具, 并完成阿里云密钥配置之后。
  2. 使用命令s init完成项目的基本配置,以阿里云为例,选择带http触发器的python3的环境,并输入第一步获得的密钥。

    image-20210710160504686

  3. 修改项目的配置文件s.yaml,完成项目名称以及描述的配置

    image-20210710162136503

配置NAS和VPC

在深度学习模型的部署中,最难处理的是大体积的机器学习依赖安装以及深度学习模型参数的储存问题。通常而言,机器学习的库大小能接近1G,而深度模型一般也有100M起步。对于函数计算来说,为了减少平台的冷启动,都会设置代码包大小限制,阿里云的函数计算代码包必须在100MB以内。因此,我们需要一个云存储来解决依赖调用与模型参数加载的问题。在本示例中,我们使用NAS(Network Attached Storage)来存放我们的依赖与模型。NAS,简单来说说就是连接在网络上,具备资料存储功能的储存系统,我们可以通过挂载的方式对NAS进行访问。

  1. 开通阿里云NAS服务,并创建一个文件系统,根据业务需求我们可以选择不同的配置。
  2. 将获得的NAS地址写入配置,并将VPC设置为自动。

    image-20210710164633602

配置注意事项

  1. 由于深度学习模型初始化时间较长,建议将初始化时间initializationTimeout调至120s以上
  2. 由于深度学习模型内存占用较大,建议将最大内存memorySize调至521MB以上

代码架构

简单来说,我们可以将基于serverless devs的工程分成三个部分。.s文件夹中存放部分配置文件,以及我们build出来的依赖和代码;src文件夹存放我们的源代码和深度学习模型参数;s.yaml文件存放我们对函数计算的配置。

image-20210710170739337

其中,src文件夹的index.py文件一般存放我们的函数入口,这里给出部分示例代码。在本项目中,我们需要对用户上传的图片进行处理。为了方便获取图片,这里我们使用flask框架。需要注意的是,对于每次执行都会进行的操作如加载模型参数,为了减少模型推理时间,我们将其放置在initialize函数中,这样这段代码只会被执行一次。

# -*- coding: utf-8 -*-
import logging
import numpy as np
from PIL import Image
import io
from skimage.transform import resize
import torch as torch
import torch.nn.functional as F
from flask import Flask, request
from models import VGG
import transforms as transforms

net = VGG('VGG19')
class_names = ['Angry', 'Disgust', 'Fear',
               'Happy', 'Sad', 'Surprise', 'Neutral']
logger = logging.getLogger()
app = Flask(__name__)

def initialize(context):
    # Get parameters from NAS
    ROOT_DIR = r'/mnt/auto/'
    # ROOT_DIR = r''
    MODEL_PATH = ROOT_DIR + 'vgg_emo_dect.t7'
    # Load the VGG network
    logger.info('load the model ...')
    checkpoint = torch.load(
        MODEL_PATH, map_location=torch.device('cpu'))
    net.load_state_dict(checkpoint['net'])
    net.eval()

@app.route("/", methods=["POST", "GET"])
def predict():
    logger.info('processing ...')
    # get the image buffer
    image = request.files.get('file').read()
    # transform it to the np array
    image_data = np.array(Image.open(io.BytesIO(image)))
    # return the final result
    inputs = preprocess(image_data)
    score, predict = infer(inputs)
    res = dict(zip(class_names, score.tolist()))
    logger.info(class_names[int(predict)])
    res['pred'] = class_names[int(predict)]
    return res

本地调试

由于本地的调试环境与远程的函数计算环境往往不同,为了兼容性,我们最好使用Docker拉取函数计算远程镜像进行调试。

  1. 下载docker(如果本机没有docker的话)
  2. 使用命令s build --use-docker进行依赖安装
  3. 使用命令s local invoke/start进行本地调试。

    image-20210710170005412

  4. 构建简单测试,对本地接口进行调用,示例测试代码:

    import requests
    
    files = {'file':('1.jpg',open('1.jpg','rb'),'image/jpg')}
    url = 'http://localhost:7218/2016-08-15/proxy/emo-dectioon/get-emotion/'
    res = requests.post(url=url, files=files)
    print(res.text)

上传依赖与模型参数

上传依赖与模型参数到NAS

  1. 上传依赖:s nas upload -r .s/build/artifacts/emo-dectioon/get-emotion/.s/python nas:///mnt/auto/python
  2. 上传模型:s nas upload src/vgg_emo_dect.t7 nas:///mnt/auto

    image-20210710172703359

  3. 查看是否上传成功:s nas command ls nas://mnt/auto

    image-20210710172455176

  4. 查看安装的依赖:s nas command ls nas:///mnt/auto/python/lib/python3.6/site-packages

    image-20210710173126004

上传成功后,我们可以在代码中简单使用路径获取对应文件:)

模型部署

在本地调试时,我们模型参数和依赖的路径都是本地路径。现在,我们要将这些路径转化为NAS的路径,并删去本地模型参数和调试生成的依赖(不然因代码包过大而无法进行部署)。需要注意的是,对于依赖,我们需要修改python的引用路径,这体现在我们的配置文件中:

image-20210710173739230

接着,运行命令s depoly即可将代码部署到远程:

image-20210710174156929

用上述测试代码调用远程接口进行测试:

image-20210710180116302

相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
目录
相关文章
|
2月前
|
机器学习/深度学习 算法 定位技术
Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现裂缝的检测识别(C#代码UI界面版)
本项目基于YOLOv8模型与C#界面,结合Baumer工业相机,实现裂缝的高效检测识别。支持图像、视频及摄像头输入,具备高精度与实时性,适用于桥梁、路面、隧道等多种工业场景。
289 27
|
1月前
|
机器学习/深度学习 数据可视化 算法
深度学习模型结构复杂、参数众多,如何更直观地深入理解你的模型?
深度学习模型虽应用广泛,但其“黑箱”特性导致可解释性不足,尤其在金融、医疗等敏感领域,模型决策逻辑的透明性至关重要。本文聚焦深度学习可解释性中的可视化分析,介绍模型结构、特征、参数及输入激活的可视化方法,帮助理解模型行为、提升透明度,并推动其在关键领域的安全应用。
208 0
|
11天前
|
机器学习/深度学习 存储 PyTorch
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
Neural ODE将神经网络与微分方程结合,用连续思维建模数据演化,突破传统离散层的限制,实现自适应深度与高效连续学习。
51 3
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
|
2月前
|
机器学习/深度学习 人工智能 PyTorch
AI 基础知识从 0.2 到 0.3——构建你的第一个深度学习模型
本文以 MNIST 手写数字识别为切入点,介绍了深度学习的基本原理与实现流程,帮助读者建立起对神经网络建模过程的系统性理解。
288 15
AI 基础知识从 0.2 到 0.3——构建你的第一个深度学习模型
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
AI 基础知识从 0.3 到 0.4——如何选对深度学习模型?
本系列文章从机器学习基础出发,逐步深入至深度学习与Transformer模型,探讨AI关键技术原理及应用。内容涵盖模型架构解析、典型模型对比、预训练与微调策略,并结合Hugging Face平台进行实战演示,适合初学者与开发者系统学习AI核心知识。
275 15
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习模型、算法与应用的全方位解析
深度学习,作为人工智能(AI)的一个重要分支,已经在多个领域产生了革命性的影响。从图像识别到自然语言处理,从语音识别到自动驾驶,深度学习无处不在。本篇博客将深入探讨深度学习的模型、算法及其在各个领域的应用。
451 3
|
5月前
|
人工智能 运维 安全
函数计算支持热门 MCP Server 一键部署
云上托管 MCP 搭建 AI Agent 将成为趋势。函数计算 FC 目前已经支持开源 MCP Server 一键托管,欢迎体验。
1031 114
|
3月前
|
机器学习/深度学习 存储 PyTorch
PyTorch + MLFlow 实战:从零构建可追踪的深度学习模型训练系统
本文通过使用 Kaggle 数据集训练情感分析模型的实例,详细演示了如何将 PyTorch 与 MLFlow 进行深度集成,实现完整的实验跟踪、模型记录和结果可复现性管理。文章将系统性地介绍训练代码的核心组件,展示指标和工件的记录方法,并提供 MLFlow UI 的详细界面截图。
132 2
PyTorch + MLFlow 实战:从零构建可追踪的深度学习模型训练系统
|
5月前
|
Serverless Python
借助 serverless 将 MCP 服务部署到云端
本文介绍了如何将 MCP 服务通过 SSE 协议部署到云端,避免本地下载和启动的麻烦。首先,使用 Python 实现了一个基于 FastMCP 的网络搜索工具,并通过设置 `transport='sse'` 启用 SSE 协议。接着,编写客户端代码测试服务功能,确保其正常运行。随后,利用阿里云函数计算服务(FC 3.0)以 Serverless 方式部署该服务,包括创建函数、配置环境变量、添加依赖层以及部署代码。最后,提供了客户端测试方法和日志排查技巧,并展示了如何在不同工具(如 Cherry-Studio、Cline 和 Cursor)中配置云端 MCP 服务。
1074 10
借助 serverless 将 MCP 服务部署到云端
|
4月前
|
安全 搜索推荐 Serverless
HarmonyOS5云服务技术分享--Serverless抽奖模板部署
本文详细介绍了如何使用华为HarmonyOS的Serverless模板快速搭建抽奖活动,手把手教你完成从前期准备到部署上线的全流程。内容涵盖账号注册、云函数配置、参数调整、托管上线及个性化定制等关键步骤,并附带常见问题解答和避坑指南。即使是零基础用户,也能轻松上手,快速实现抽奖活动的开发与部署。适合希望高效构建互动应用的开发者参考学习。

相关产品

  • 函数计算