今天,我们将使用Hugging Face、FastAPI和Docker部署一个简单的模型,演示如何有效地实现这个目标。

本文介绍了使用FastAPI和Docker生成一个随时可用的Hugging Face模型。

想象一下,利用Hugging Face模型来确定评论的情绪。在过去,第一步是制作这样一个模型,并确保它正常工作。

然而,今天的预训练模型让我们只需花很少的精力,就能准备好这样的大语言模型(LLM)。

一旦我们准备好使用这个模型,主要目标是让公司的同事能够使用这个模型,而不需要下载或从头开始实现它。

为此,我们将创建一个端点API,使用户能够独立地调用和使用模型。这就是我们所说的从头到尾构建的端到端项目。

今天,我们将使用Hugging Face、FastAPI和Docker部署一个简单的模型,演示如何有效地实现这个目标。

第1步:选择我们的Hugging Face模型

首先要做的是选择一个适合我们需要的Hugging Face模型。我们可以使用以下命令在我们的环境中轻松安装Hugging Face:

复制

pip install transformers # remember to work with transformers we need either tensorflow or pytorch installed as well pip install torch pip install tensorflow

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

现在,我们需要导入Transformer库的管道命令。

复制

from transformers import pipeline

  • 1.

然后,使用pipeline命令,我们可以轻松生成一个模型来定义特定文本的情绪。我们可以使用两种不同的方法来做到这一点:通过定义任务“情绪分析”或通过定义模型,如下面的代码所示。

复制

# Defining directly the task we want to implement. pipe = pipeline(task=”sentiment-analysis”) # Defining the model we choose. pipe = pipeline(model=”model-to-be-used”)

  • 1.
  • 2.
  • 3.
  • 4.

值得一提的是,不建议使用基于任务的方法,因为它限制了我们对所使用的特定模型的控制。

在本文例子中,我选择了“distilbert-base-uncase-fine tuned-sst-2-english”,但你可以随意浏览Hugging Face Hub,选择适合需要的任何型号。你可以在下面的文章(https://www.datacamp.com/tutorial/what-is-hugging-face)中找到Hugging Face的简单指南。

复制

pipe = pipeline(model=”distilbert/distilbert-base-uncased-finetuned-sst-2-english”)

  • 1.
  • 2.

我们已定义了管道模型,只需发送一个简单的提示,就可以返回结果。比如说,输入以下命令:

复制

print(pipe(“This tutorial is great!”))

  • 1.

我们将得到[{‘label’: ‘POSITIVE’, ‘score’: 0.9998689889907837}]

想象一下,我们希望我们的用户得到一个关于这个分类的自然语言句子。我们也可以实施简单的Python代码同样实现这个目的:

复制

def generate_response(prompt:str): response = pipe(“This is a great tutorial!”) label = response[0][“label”] score = response[0][“score”] return f”The ‘{prompt}’ input is {label} with a score of {score}” print(generate_response(“This tutorial is great!”))

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

重复同样的试验,我们会得到:

复制

The ‘This tutorial is great!’ input is POSITIVE with a score of 0.9997909665107727

  • 1.
  • 2.

现在我们有了一个切实可行的模型,可以继续定义我们的API。

第2步:使用FastAPI为模型编写API端点

为了定义API,我们将使用FastAPI。它是一个用于构建高性能Web API的Python框架。首先,使用pip命令安装FastAPI库,并将其导入到我们的环境中。此外,我们将利用pydantic库来确保输入是所需的类型。

下面的代码将生成切实可行的API,我们的同事可以直接使用。

复制

from fastapi import FastAPI from pydantic import BaseModel from transformers import pipeline # You can check any other model in the Hugging Face Hub pipe = pipeline(model=”distilbert/distilbert-base-uncased-finetuned-sst-2-english”) # We define the app app = FastAPI() # We define that we expect our input to be a string class RequestModel(BaseModel): input: str # Now we define that we accept post requests @app.post(“/sentiment”) def get_response(request: RequestModel): prompt = request.input response = pipe(prompt) label = response[0][“label”] score = response[0][“score”] return f”The ‘{prompt}’ input is {label} with a score of {score}”

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

下面是代码中逐步发生的事情:

  • 导入必要的库:代码先导入FastAPI和Pydantic,确保我们收发的数据结构正确。
  • 加载模型:加载一个预训练的情绪分析模型,正如我们在第一步中所做的那样。
  • 设置FastAPI应用程序:app = FastAPI()初始化FastAPI应用程序,使其准备好处理请求。
  • 定义请求模型:使用Pydantic,定义RequestModel类。该类指定了我们期望输入字符串,确保API只接受正确格式的数据。
  • 创建端点:@app.post(“/sentiment”)装饰器告诉FastAPI,当向/sentiment端点发出POST请求时,应该触发该函数。get_response函数接受RequestModel对象作为输入,输入含有我们想要分析的文本。
  • 处理请求:在get_response函数中,从请求中提取文本并传递给模型(pipe(prompt))。模型返回带有情绪标签(比如”POSITIVE”或“NEGATIVE”)的响应和表示预测置信度的分数。
  • 返回响应:最后,函数返回格式化的字符串,其中包含输入文本、情绪标签和置信度分数,为用户提供一个清晰而简洁的结果。

如果我们执行代码,API将在本地主机中可用,如下图所示:

简而言之,这段代码设置简单的Web服务,你可以往该服务发送一段文本,其给出的回复是分析该文本的情绪,通过FastAPI充分利用Hugging Face模型的强大功能。

接下来,我们应该将应用程序容器化,以便可以在任何地方执行,而不仅仅是在本地计算机上执行。这将确保更好的可移植性和易于部署。

第3步:使用Docker运行我们的模型

容器化需要将应用程序放入容器中。Docker容器运行Docker镜像的实例,这包括它自己的操作系统和应用程序所需的所有依赖项。

比如说,你可以在容器中安装Python和所有必需的包,这样它可以在任何地方运行,不需要安装这些库。

为了在Docker容器中运行我们的情绪分析应用程序,我们先需要创建Docker镜像。这个过程包括写一个Dockerfile,指定Docker镜像应该含有什么。

如果你的系统没有安装Docker,可以从Docker的网站上下载。这是我们将在这个项目中使用的Dockerfile,在存储库中名为Dockerfile。

复制

# Use an official Python runtime as a parent image FROM python:3.10-slim # Set the working directory in the container WORKDIR /sentiment # Copy the requirements.txt file into the root COPY requirements.txt . # Copy the current directory contents into the container at /app as well COPY ./app ./app # Install any needed packages specified in requirements.txt RUN pip install -r requirements.txt # Make port 8000 available to the world outside this container EXPOSE 8000 # Run main.py when the container launches, as it is contained under the app folder, we define app.main CMD [“uvicorn”, “app.main:app”, “–host”, “0.0.0.0”, “–port”, “8000”]

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

然后,我们只需要在终端中运行以下命令来构建Docker镜像。

复制

docker build -t sentit-app

  • 1.

然后为了执行,我们有两个选项:

使用带有命令的终端。

复制

docker run -p 8000:8000 –name name_of_cointainer sentiment-hf

  • 1.

使用docker hub。我们很容易进入docker hub,点击镜像的运行按钮。

这就是全部细节!现在,我们有了一个切实可行的情绪分类模型,它可以在任何地方工作,并且可以使用API来执行。

结语

具体流程如下:

  • 模型选择和设置:选择和配置一个Hugging Face预训练模型进行情绪分析,确保它满足你的要求。
  • 使用FastAPI进行API开发:使用FastAPI创建API端点,实现与情绪分析模型的轻松交互。
  • Docker容器化:使用Docker容器化应用程序,以确保可移植性和跨不同环境的无缝部署。

你可以在下面的GitHub代码库中查看我的全部代码:https://github.com/rfeers/data-science-portfolio/tree/main/end-to-end-projects/simple-docker-hf-model。

原文标题:A Simple to Implement End-to-End Project with HuggingFace,作者:Josep Ferrer

链接:

https://www.kdnuggets.com/a-simple-to-implement-end-to-end-project-with-huggingface。

想了解更多AIGC的内容,请访问:

51CTO AI.x社区

https://www.51cto.com/aigc/

Loading

作者 yinhua

发表回复