使用Openfaas部署AI模型进行Serverless函数模型推理

news/2024/5/20 7:51:43 标签: python, Openfass, Serverless, 模型推理

本文主要是从基于已经安装部署好openfaas后的环境,来教大家如何部署AI模型进行函数推理。
如果你还未能安装部署openfaas,请openfaas官网进行安装部署。

创建适用于model inference的函数模板:

1. 拿到现有模板:

faas-cli template pull
faas-cli new --list

python3debainpython3model_11">2. 复制python3-debain模板,命名为python3-model

修改里面的template/python3-model/dockerfile文件:
具体内容为:

FROM --platform=${TARGETPLATFORM:-linux/amd64} ghcr.io/openfaas/classic-watchdog:0.2.1 as watchdog
FROM --platform=${TARGETPLATFORM:-linux/amd64} python:3

ARG TARGETPLATFORM
ARG BUILDPLATFORM

# Allows you to add additional packages via build-arg
ARG ADDITIONAL_PACKAGE

COPY --from=watchdog /fwatchdog /usr/bin/fwatchdog
RUN chmod +x /usr/bin/fwatchdog

# 替换为阿里云的源
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && \
    sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list

# 更新apt-get并安装一些常用工具
RUN apt-get update && apt-get install -y \
    vim \
    git \
    wget \
    curl \
    && rm -rf /var/lib/apt/lists/*

# 替换为清华大学pip源
RUN mkdir -p ~/.pip \
    && echo '[global]' > ~/.pip/pip.conf \
    && echo 'index-url = https://pypi.tuna.tsinghua.edu.cn/simple' >> ~/.pip/pip.conf \
    && echo 'trusted-host = pypi.tuna.tsinghua.edu.cn' >> ~/.pip/pip.conf

# 安装PyTorch和其他依赖项
RUN pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu && \
    pip3 install Pillow \
    && rm -rf /var/lib/apt/lists/
#    pip install numpy && \
#    pip install matplotlib && \
#    pip install scikit-learn && \
#    pip install scipy && \

#    pip install opencv-python-headless && \
#    pip install requests && \
#    pip install tqdm


#RUN apt-get update \
#    && apt-get install -y ca-certificates ${ADDITIONAL_PACKAGE} \
#    && rm -rf /var/lib/apt/lists/

# Add non root user
RUN groupadd app && useradd -r -g app app

WORKDIR /home/app/

COPY index.py           .
COPY requirements.txt   .

RUN chown -R app /home/app && \
    mkdir -p /home/app/python && chown -R app /home/app
USER app
ENV PATH=$PATH:/home/app/.local/bin:/home/app/python/bin/
ENV PYTHONPATH=$PYTHONPATH:/home/app/python

RUN pip install -r requirements.txt --target=/home/app/python

RUN mkdir -p function
RUN touch ./function/__init__.py

WORKDIR /home/app/function/
COPY function/requirements.txt	.

RUN pip install -r requirements.txt --target=/home/app/python

WORKDIR /home/app/

USER root

COPY function           function

# Allow any user-id for OpenShift users.
RUN chown -R app:app ./ && \
    chmod -R 777 /home/app/python

USER app

ENV fprocess="python3 index.py"
EXPOSE 8080

HEALTHCHECK --interval=3s CMD [ -e /tmp/.lock ] || exit 1

CMD ["fwatchdog"]

3.创建函数

faas-cli new --lang python3-model resnet18

编写函数代码(随机生成图片,测试使用,可以自行里面的逻辑)
resnet18/handler.py

python">import torch
import torchvision.models as models
import torchvision.transforms as transforms
from PIL import Image

# Load pre-trained ResNet18 model
model = models.resnet18(pretrained=True)

def handle(req):
    """handle a request to the function
    Args:
        req (str): request body
    """

    # 转换输入图像
    transform = transforms.Compose([
        transforms.Resize(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize(mean=[0.485, 0.456, 0.406],
                             std=[0.229, 0.224, 0.225])
    ])

    # 加载并预处理随机生成的图片
    img = Image.new('RGB', (224, 224))
    input_tensor = transform(img)

    # 添加一个批次维度
    input_batch = input_tensor.unsqueeze(0)

    # 将模型设置为评估模式
    model.eval()

    # 使用模型进行预测
    with torch.no_grad():
        output = model(input_batch)

    # 获取预测结果中的最大值及其索引
    _, predicted = torch.max(output.data, 1)

    # 打印预测结果
    print(predicted.item())

    return req+"inference done"

4. 修改添加所需的requestment.txt依赖

resnet18/requestment.txt

按需添加: eg. requests

5. 编译并部署

faas-cli build -f ./resnet18.yml
faas-cli deploy -f ./resnet18.yml

6. 调用

通过 http://127.0.0.1:8080下 ui 或者 curl进行函数调用


http://www.niftyadmin.cn/n/282015.html

相关文章

设计模式中职责链 chain of responsibility案例举例

JAVA实现案例 职责链(Chain of Responsibility)模式是一种行为型模式,它将请求从发送者和接收者解耦,通过沿着一个链传递请求,使得可以多个对象都有机会处理请求。下面是一个简单的JAVA实现职责链模式的例子&#xff…

如何进行物联网渗透测试?

渗透测试揭示了未知的安全漏洞,因为值得信赖的专业人员模拟威胁性攻击。他们深入挖掘固件和硬件,以查找漏洞和可访问性疏忽。 物联网(IoT)连接设备是严重且可预防的安全漏洞的意外来源,现在是时候像其他硬件一样对其进行渗透测试处理了。为什…

推荐算法实战项目:WideDeep原理以及案例实战(附完整 Python 代码)

本文要介绍的是Google于2016年提出的Wide&Deep模型,此模型的提出对业界产生了非常大的影响,不仅其本身成功地应用在多家一线互联网公司,而且其后续的改进工作也一直延续至今。 Wide&Deep模型正如其名,分别包含了Wide部分…

定位的特殊应用

注意:发生固定定位,绝对定位后,元素都变成了定位元素,默认高宽被内容撑开,则可以设置宽高;以下只针对绝对定位和固定定位的元素,不包括相对定位元素。 1.定位元素块的宽充满包含块 前提&#x…

LeetCode347. 前 K 个频繁元素

LeetCode347. 前 K 个频繁元素 题目 给定一个非空的整数数组,返回其中出现频率前 k 高的元素。 示例 1: 输入: nums [1,1,1,2,2,3], k 2 输出: [1,2]示例 2: 输入: nums [1], k 1 输出: [1]说明: 你可以假设给定的 k 总是合理的,且…

是不是在为 API 烦恼 ?好用免费的api接口大全呼之欲出

前期回顾 “ ES6 —— 让你的JavaScript代码从平凡到精彩 “_0.活在风浪里的博客-CSDN博客Es6 特性https://blog.csdn.net/m0_57904695/article/details/130408701?spm1001.2014.3001.5501 👍 本文专栏:开发技巧 先说本文目的,本文会分…

电脑中病毒了怎么修复,计算机Windows系统预防faust勒索病毒方法

随着计算机系统的不断发展,我们所面对的网络安全威胁也变得越来越严重。其中,较为常见且危险的威胁就是勒索病毒。随着勒索病毒加密算法的不断升级,最近faust勒索病毒开始流行。Faust勒索病毒主要的攻击目标是Windows操作系统,一旦…

JavaScript实现输入数值,判断是否为(任意)三角形的代码

以下为实现输入数值,判断是否为(任意)三角形的代码和运行截图 目录 前言 一、实现输入数值,判断是否为三角形 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 二、实现输入数值,判断是否为…