函数计算+HuggingFace部署

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
函数计算FC,每月15万CU 3个月
简介: 函数计算一键部署huggingface模型

概述

函数计算上线huggingface应用模版,需求如下:

  • 用户只需要制定huggingface model_id、model_task等信息就能将模型一键拉起
  • 对外提供server服务,并以api形式输出,不提供UI页面

基于上述诉求,能让用户在函数计算一键拉起huggingface模型,便于用户基于函数计算使用模型,同时提供AI runtime的原子能力,让更多用户享受到大模型发展带来的红利

部署


创建应用进入到详情页

huggingface配置

image.png

其中主要涉及huggingface中的模型ID, 模型任务类型, 加载模型需要的库,已经huggingface access token, 下面以distilbert/distilbert-base-uncased-finetuned-sst-2-english为例,进入到模型详情页,https://huggingface.co/distilbert/distilbert-base-uncased-finetuned-sst-2-english

image.png

模型ID, 其中上图中标识1,即为模型ID

GPU配置

GPU相关配置按需调整即可 image.png

创建完成

创建完成直接通过域名调用即可,域名见下图位置

image.png

方案

分析huggingface中的模型,本身为了用户使用方便,huggingface提供了便捷性能优越的pipeline库便于用于直接基于pipeline使用模型,减小用户使用和学习成本。本方案就是基于huggingface封装的pipeline进行封装设计。而huggingface涉及到的pipeline主要分两类:

  • transformers
  • diffusers

在huggingface模型详情页有具体的模型划分,非常方便用户进行区分

概览

整个方案最终只需要用户指定huggingface的模型ID+模型task即可,依赖的云产品:

  • 函数计算, 用于提供算力
  • NAS

整个应用包括三个资源:

  • model_download, 初始化应用时进行模型下载
  • model_app, 部署模型提供api接口服务
  • NAS
  • 用于持久化模型(可选,不选择挂载的话模型每次服务启动都需要重新进行拉取)
  • 用于安装基础镜像中不支持的python库

image.png

详情

huggingface应用使用的huggingface提供的transformers和diffusers两个库进行模型加载,所以本身模型需要能支持这两个库进行加载才行。

transformers

如何确定模型能被transformers加载,可以进入到模型详情页,这里以distilbert/distilbert-base-uncased-finetuned-sst-2-english为例,如下图所示

image.png

如上如所示,圈出位置有Transformers代表能用transformers进行加载,就可以使用函数计算提供的huggingface应用模版

支持TASK列表

HuggingFace页面展示的TASK

部署函数计算huggingface时需要填写的model_task

Audio Classification

audio-classification

Automatic Speech Recognition

automatic-speech-recognition

Text-to-Audio

text-to-audio

Text-to-Speech

text-to-speech

Depth Estimation

depth-estimation

Image Classification

image-classification

Image Segmentation

image-segmentation

Image-to-Image

image-to-image

Object Detection

object-detection

Video Classification

video-classification

Zero-Shot Image Classification

zero-shot-image-classification

Zero-Shot Object Detection

zero-shot-object-detection

Fill-Mask

fill-mask

Question Answering

question-answering

Summarization

summarization

Table Question Answering

table-question-answering

Text Classification

text-classification

Text Generation

text-generation

Text2Text Generation

text2text-generation

Token Classification

token-classification

Translation

translation

Zero-Shot Classification

zero-shot-classification

Document Question Answering

document-question-answering

Feature Extraction

feature-extraction

Image Feature Extraction

image-feature-extraction

Image-to-Text

image-to-text

Mask Generation

mask-generation

Visual Question Answering

visual-question-answering

示例

下面是一个用户层面创建步骤

  • 进入到huggingface模型详情页,查看对应的模型ID/模型TASK/pipeline类型

以openai/whisper-large-v3为例,获取如下三个信息,如下三个信息在详情页不全的模型不支持部署

  • 1、model_id
  • 2、model_task
  • 3、pipeline类型(Transformers/Diffusers)

image.png

  • 在应用模版中填上如上三个信息, 其中模型任务见上文Task列表,进行创建应用即可,就会拉起一个加载该模型的server,对外提供API服务
  • api服务的入参可以简单使用{"data":{"input":"xxxxxx"}}

diffusers

如何确定哪些模型能使用diffusers进行加载,以runwayml/stable-diffusion-v1-5为例,查看模型详情页

image.png

如上图圈出有Diffusers标识的才可以使用

支持TASK列表

参考:https://huggingface.co/docs/diffusers/using-diffusers/pipeline_overview

image.png

HuggingFace页面展示的TASK

部署函数计算huggingface时需要填写的model_task

参考文档

Text-to-Image

text-to-image

https://huggingface.co/docs/diffusers/using-diffusers/conditional_image_generation

Image-to-Image

image-to-image

https://huggingface.co/docs/diffusers/using-diffusers/img2img

Inpainting

inpainting

https://huggingface.co/docs/diffusers/using-diffusers/inpaint

Depth-to-image

depth-to-image

https://huggingface.co/docs/diffusers/using-diffusers/depth2img

示例

下面是一个用户层面创建步骤

  • 进入到huggingface模型详情页,查看对应的模型ID/模型TASK/pipeline类型

以runwayml/stable-diffusion-v1-5为例,获取如下三个信息,如下三个信息在详情页不全的模型不支持部署

  • 1、model_id
  • 2、model_task
  • 3、pipeline类型(Transformers/Diffusers)

image.png

  • 在应用模版中填上如上三个信息, 其中模型任务见上文Task列表,进行创建应用即可,就会拉起一个加载该模型的server,对外提供API服务

API

由于不同的模型入参出参都是不同,具体API参数需要参考,由于huggingface模型加载主要使用两个库Transformers和Diffusers两个,所以API也进行区分

推理请求

POST /

具体body参数如下

Transformers

  • api服务的入参可以简单使用{"data":{"input":"xxxxxx"}}
  • 当然也支持传递更具体的参数,确定模型服务对外提供API参数,以transformers的pipeline为例,进入到https://huggingface.co/docs/transformers/main_classes/pipelines,根据模型对应的model_task找到对应pipelines,以text-classification(Text Classification)为例,在截图位置找到对应的pipeline, TextClassificationPipeline image.png

入参

进入到具体pipeline(TextClassificationPipeline)的详情,查看对应的__call__方法,函数参数就是对应的API的入

https://huggingface.co/docs/transformers/v4.39.3/en/main_classes/pipelines#transformers.TextClassificationPipeline.__call__

image.png

出参

__call__返回值即为出参数据,如pipeline(TextClassificationPipeline)出参

image.png

示例

// 请求:POST /
    // 简单调用
    {
      "data": {
        "input": "你好"
      }
    }
    
    // 或者基于__call__参数
    
    {
      "data": {
        "inputs": "你好",
        "top_k": 1,
        "fucntion_to_apply": "default"
      }
    }
// 结果
  {
    "data": [
        {
            "label": "NEGATIVE",
            "score": 0.7005688548088074
        }
      ]
  }

Diffusers

如何确定API入参,以runwayml/stable-diffusion-v1-5为例,

  • 进入模型详情页,找到下图中具体的pipeline信息(以Pipeline为后缀)

image.png

image.png

入参

pipeline详情中的__call__函数的入参就是API参数, https://huggingface.co/docs/diffusers/v0.27.2/en/api/pipelines/stable_diffusion/text2img#diffusers.StableDiffusionPipeline.__call__

image.png

示例

POST /
{
  "data":{
    "prompt": "a dog",
    "width": 512,
    "height": 512
  }
}

安装模型依赖

  • 在应用页面,找到模型推理函数,点击函数进入函数详情页

image.png

  • 执行一次推理,登录实例,以安装requests为例, 执行pip install requests --target=/mnt/${functionName}/python , 这里functionName=huggingface-s7xy-model-app也即推理函数名

image.png

示例

image.png

image.png

注意📢

  • 并不是所有的huggingface都支持pipeline部署,本次方案优先支持pipeline进行部署的模型,其他模型后续看方案进行支持
  • api的输出,默认np.ndarray->list, Image->base64
相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
2月前
|
消息中间件 JavaScript 中间件
函数计算产品使用问题之WebIDE编写的Node.js代码是否会自动进行打包部署
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
2月前
|
消息中间件 运维 Serverless
函数计算产品使用问题之如何部署Stable Diffusion Serverless API
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
2月前
|
存储 Serverless 文件存储
函数计算产品使用问题之如何在一键部署的ComfyUI中上传大模型和插件
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
20天前
|
存储 人工智能 弹性计算
函数计算部署 AI 大模型解决方案测评
函数计算部署 AI 大模型解决方案测评
|
2月前
|
存储 JSON Serverless
西游再现,函数计算一键部署 Flux 超写实文生图模型部署
参与体验活动生成西游人物图像,既有机会赢取好礼!本次实验在函数计算中内置了flux.1-dev-fp8大模型,通过函数计算+Serverless应用中心一键部署Flux模型,快速生成超写实图像。首次开通用户可领取免费试用额度,部署过程简单高效。完成部署后,您可以通过修改提示词生成各种风格的图像,体验Flux模型的强大绘图能力。
西游再现,函数计算一键部署 Flux 超写实文生图模型部署
|
2月前
|
消息中间件 JavaScript 中间件
函数计算产品使用问题否会自动进行打包部署
本文解答了五个关于阿里云函数计算的常见问题。包括:WebIDE编写的Node.js代码如何自动打包部署;如何为fc-stable-diffusion-plus开启API功能;如何在代码中主动结束实例并重启新实例处理触发器;如何在Koa中读取invoke事件消息;以及解决异步事件未触发的问题。提供了详细的解决方案和注意事项,帮助用户更好地理解和使用函数计算服务。[查看详情](https://developer.aliyun.com/ask/649609)
28 1
|
2月前
|
物联网 Serverless API
函数计算产品使用问题之怎么部署Docker镜像进行lora训练
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
2月前
|
存储 人工智能 JSON
基于函数计算FC一键部署ComfyUI绘画平台体验
【8月更文挑战第11天】基于函数计算FC一键部署ComfyUI绘画平台体验
96 1
|
2月前
|
运维 前端开发 Serverless
Serverless痛点解决问题之将 WordPress 工程部署到函数计算中如何解决
Serverless痛点解决问题之将 WordPress 工程部署到函数计算中如何解决
37 1
|
2月前
|
人工智能 Serverless 异构计算
用函数计算FC部署生成3D卡通头像模型体验
【8月更文挑战第10天】用函数计算FC部署生成3D卡通头像模型体验
36 2

相关产品

  • 函数计算