使用 Hugging Face 的 Docker Spaces 建立機器學習應用程式


摘要

本文探討如何使用 Hugging Face 的 Docker Spaces 建立機器學習應用程式,對於希望提升開發效率與模型性能的讀者而言,這是一個不可錯過的重要主題。 歸納要點:

  • Hugging Face 最新釋出的 LLM 訓練範本顯著提升了自然語言理解(NLU)和生成(NLG)的效能,特別在對話生成和摘要提取方面表現卓越。
  • 結合 Docker Spaces 和 FastAPI,開發者可以輕鬆建立與最佳化容器,大幅縮短部署時間並降低資源消耗。
  • Hugging Face 提供 CI/CD 功能,自動化端到端構建過程,使得機器學習模型的監控及快速部署更加高效。
總之,透過 Hugging Face 的最新技術和工具,開發者能夠更有效率地構建、部署及優化機器學習應用程式。

這篇部落格文章將指導您如何使用 Hugging Face Transformers 函式庫建立一個簡單的文字生成模型,並建立一個 FastAPI 應用程式來暴露生成文字的 REST API,最後透過 Docker 容器進行部署。讓我們開始吧!

我們在研究許多文章後,彙整重點如下
網路文章觀點與我們總結
  • PrimeHub是一個端到端的MLOps平台,涵蓋整個機器學習生命周期。
  • FastAPI可以用來開發高效能的Web API,並支援Python型別提示。
  • 使用Docker可以將FastAPI應用封裝,便於部署和管理。
  • AWS EC2可用於部署封裝好的API,提高可擴展性和靈活性。
  • 結合Streamlit前端與FastAPI後端,可以創建完整的機器學習應用服務。
  • Hugging Face提供了Spaces,使得快速創建和部署ML應用變得容易。

現在科技不斷進步,讓我們有更多機會把複雜的機器學習模型轉化為實際應用。透過FastAPI,我們不僅能打造高效的Web API,還能利用Docker簡化部署過程。此外,把這些技術與AWS等平台結合,我們就能輕鬆地將自己的想法推向市場。無論是專業人士或是新手,都可以借助這些工具來實現自己的創意!

觀點延伸比較:
平台特點適用範圍技術棧優勢
Hugging Face Spaces快速創建和部署ML應用,支援多種框架初學者及快速原型開發Python, Streamlit, Gradio簡易上手,社群活躍
PrimeHub端到端的MLOps管理,涵蓋整個機器學習生命周期企業級的AI解決方案Python, R, Docker等強大的數據治理與協作功能
FastAPI高效能Web API開發,支援型別提示和自動生成文檔需要構建RESTful API的項目Python 3.6+性能優越、開發效率高
Docker容器化應用封裝與管理,便於跨環境部署微服務架構及CI/CD流程各種語言和框架支持(如Python)可移植性強、資源利用率高
AWS EC2靈活擴展的雲服務平台,可隨時調整資源配置大規模運算需求及彈性擴展場景Linux, Windows等操作系統支持全球基礎設施完善、高可用性

前提條件:對 Python、Hugging Face Transformers、FastAPI 和 Docker 的基本理解。需要一個預訓練的 Transformers 模型用於文字生成(例如,google/flan-t5-small)。需要用 Python 編寫的一個文字生成函式,該函式利用了這個 Transformers 模型。

我們將建立三個檔案,分別命名為 app.py、requirements.txt 和 Dockerfile。


自然語言處理新篇章:大型語言模型與效能最佳化

這段程式碼建立了一個 FastAPI 應用程式,這是一個用於使用 Python 建立 API 的網頁框架。該程式碼的主要目的是處理對 /generate 端點的 GET 請求,該端點將利用 transformers 庫中的預訓練文字生成模型生成文字。

程式碼分為幾個部分:
1. 匯入所需的庫:fastapi 用於建立網頁框架。
2. CORSMiddleware 用於配置跨來源資源共享(CORS),這對於允許來自不同域的請求與 API 進行互動至關重要。
3. RedirectResponse 用於將請求重定向到 API 文件。
4. pipeline 則用來建立文字生成管道的例項。

**最新趨勢:大型語言模型的崛起**
近期,大型語言模型(LLM)在自然語言處理領域取得了突破性進展,其中最著名的包括 GPT-3 和 BLOOM。這些 LLM 擁有比傳統模型更大的引數規模和訓練資料集,賦予其生成更流暢、更具連貫性的文字能力。因此,將 LLM 整合至 API 中,不僅能顯著提升文字生成任務的品質,也能滿足日益增長的市場需求。

**深入要點:效能最佳化**
在部署文字生成 API 時,效能最佳化至關重要。例如,可考慮採用容器化技術(如 Docker 或 Kubernetes)來部署 API,以實現可擴充套件性、容錯性和成本效益的最佳化。使用非同步處理(例如 asyncio)可以進一步提升效能,尤其是在面對大量請求時。


#save it as app.py from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import RedirectResponse from transformers import pipeline  # Create a new FastAPI app instance app = FastAPI()  # Add CORS middleware app.add_middleware(     CORSMiddleware,     allow_origins=["*"],  # Allow all origins     allow_credentials=True,     allow_methods=["*"],  # Allow all methods     allow_headers=["*"],  # Allow all headers )  # Initialize the text generation pipeline pipe = pipeline("text2text-generation", model="google/flan-t5-small")  # Define a root path to verify the server is running @app.get("/", include_in_schema=False) def read_root():     return RedirectResponse(url="/docs")  # Define a function to handle the GET request at `/generate` @app.get("/generate") def generate(text: str):     """     Using the text2text-generation pipeline from `transformers`, generate text     from the given input text. The model used is `google/flan-t5-small`.     """     # Use the pipeline to generate text from the given input text     output = pipe(text)          # Return the generated text in a JSON response     return {"output": output[0]["generated_text"]}

2. 建立一個新的 FastAPI 應用例項,命名為 app。3. 為應用新增 CORS 中介軟體。這項配置允許來自任何來源的請求,啟用憑證,並允許所有方法和標頭。4. 透過從 transformers 庫中載入 google/flan-t5-small 模型來初始化文字生成管道。5. 定義根路徑 (/) ,將請求重定向至 API 文件。


6. 定義 /generate 端點,該端點接受一個文字引數。這個端點使用初始化的文字生成管道,根據輸入文字建立新的文字。生成的文字將以 JSON 格式返回。在執行此 FastAPI 應用並透過 GET 請求訪問 /generate 端點時,它將根據提供的輸入文字生成新內容,並將結果以 JSON 格式返回。


這段程式碼是一個需要為您的專案成功執行而安裝的 Python 套件列表。它應該被儲存為一個名為 requirements.txt 的檔案。

fastapi:這個套件用於建立 FastAPI 網路應用,FastAPI 是一個現代化、高效能(高效能)且輕量級的 Python 網路框架,基於標準的 Python 相依性和最新的網路標準。

uvicorn:這個套件是適用於 Python 3.7 以上版本的 ASGI 伺服器,Uvicorn 是一款高效能、輕量級且模組化的 ASGI 伺服器,用來執行 FastAPI 應用。


3. transformers:這個套件是一個最先進的自然語言處理(NLP)庫,擁有超過 100 個預訓練模型,並使用 Python 語言開發。它可以無縫地整合來自 Hugging Face Transformers 庫的各種強大模型。4. torch:這個套件是 PyTorch 的核心庫,PyTorch 是一個 Python 機器學習庫,提供了一個簡單且靈活的介面,用於定義計算圖。它被用於深度學習模型的訓練和推斷。


#save it as requirements.txt fastapi uvicorn transformers torch

透過在您的專案中安裝這些套件,您將能夠獲得建立使用 Hugging Face Transformers 函式庫進行文字生成的 FastAPI 應用所需的工具。requirements.txt 檔案則用來確保在不同環境和機器上所需的套件能一致地被安裝。


這段程式碼是一個 Dockerfile,用於定義構建 Docker 映像的指令。該映像旨在執行一個 FastAPI 應用程式。這個 Dockerfile 的主要目的是為 FastAPI 應用程式設定環境並執行它。以下是步驟的詳細說明:

#save it as Dockerfile # Use the official Python 3.9 image FROM python:3.9  # Set the working directory to /code WORKDIR /code  # Copy the requirements.txt file into the container COPY requirements.txt .  # Install the dependencies RUN pip install --no-cache-dir --upgrade -r requirements.txt  # Set up a new user named "user" with user ID 1000 RUN useradd -m -u 1000 user  # Switch to the "user" user USER user  # Set home to the user's home directory ENV HOME=/home/user \     PATH=/home/user/.local/bin:$PATH  # Set the working directory to the user's home directory WORKDIR $HOME/app  # Copy the current directory contents into the container at $HOME/app setting the owner to the user COPY --chown=user . $HOME/app  # Expose the port FastAPI will run on EXPOSE 7860  # Start the FastAPI app on port 7860, the default port expected by Spaces CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]

建立高效且可擴充套件的 FastAPI Docker 容器

使用官方的 Python 3.9 映像作為 Docker 容器的基礎映像。將工作目錄設定為 /code。將 requirements.txt 檔案複製到容器中,並安裝 requirements.txt 檔案中列出的依賴項。建立一個名為 ′user′ 的新使用者,其使用者 ID 為 1000。切換使用者上下文至剛剛建立的 ′user′ 使用者。將 ′user′ 的主目錄設定為 /home/user,並將工作目錄切換至該使用者的主目錄。接著,將當前目錄的內容複製到容器中的 /home/user/app 路徑,所複製檔案的擁有權會被設定給 ′user′ 使用者。

接下來,開放埠 7860,此埠是 FastAPI 將執行的埠。在啟動容器時指定執行命令,此命令會使用 uvicorn 伺服器在預期於 Spaces 上執行的預設埠 7860 啟動 FastAPI 應用程式。

當你從這個 Dockerfile 建立並執行一個容器時,它會建立一個最小化環境,其中包含必要的依賴項已安裝、切換至 ′user′ 帳號並執行 FastAPI 應用程式。

**結合 NVIDIA GPU 以加速 FastAPI 推論:** 在 Dockerfile 中加入安裝 NVIDIA GPU 驅動程式和 CUDA Toolkit 的步驟,使得容器能充分利用 GPU 加速 FastAPI 應用程式的推論作業,是提升效能的重要措施。同樣地,**整合 GitLab CI/CD:** 整合 GitLab CI/CD 流程,可以自動化 Docker 容器的建置與部署過程,以簡化部署流程,也確保每次變更都能順利地被建置和部署到 Spaces 上,有效提高開發效率與可靠性。

現在,是時候在 Hugging Face(https://huggingface.co/)上建立一個 Docker 空間了,請使用“建立新空間”功能,如下圖所示。


接下來,您可以選擇您喜歡的專案名稱,選擇一個許可證,並使用 Docker 作為軟體開發工具包 (SDK),如下面的圖示所示。Spaces 提供了預先構建的 Docker 模板,例如 Argilla 和 Livebook,讓您能夠快速啟動使用開源工具的機器學習 (ML) 專案。如果您選擇「空白」選項,那表示您希望手動建立您的 Dockerfile。


好的,現在你已經擁有一個空的空間資源庫,是時候新增一些程式碼了。😎這個範例應用程式將包含以下三個檔案:
requirements.txt - 列出 Python 專案或應用程式的依賴項
app.py - 一個我們將編寫 FastAPI 應用程式的 Python 指令碼
Dockerfile - 設定我們的環境,安裝 requirements.txt,然後啟動 app.py

為此,請導航到你的空間的「檔案和版本」選項卡,然後選擇「新增檔案」(如下圖所示)。值得注意的是,如果你更喜歡,也可以使用 Git。


提交檔案並監控構建狀態

請確保每個檔案的命名與我們在此所做的一樣。將上述提供的三個檔案(app.py、requirements.txt、Dockerfile)一併加入。在建立並填充所有必要的檔案後,透過點選「提交新檔案到主分支」按鈕來提交每個新檔案。一旦您提交了這些檔案,您的空間會切換到「構建中」,同時您應該能看到容器構建日誌的即時更新,以便監控其狀態。👀如果一切順利,當構建完成後,您的空間將轉為「執行中」,由 FastAPI 生成的 Swagger 檔案也會出現在應用程式選項卡中。因為這些檔案是互動式的,您可以透過展開 /generate 端點的詳細資訊並點選「試試看!」來嘗試該端點。


本文介紹了建立 Docker 空間的基本知識,以及如何構建和配置一個基礎的 FastAPI 應用程式,該應用程式使用 google/flan-t5-small 模型進行文字生成。您可以將這份指南作為起點,以構建更複雜且令人興奮的應用程式,充分利用機器學習的強大能力。


乾杯!祝閱讀愉快!持續學習!如果你喜歡這篇文章,請給我投票支援!謝謝!你可以在 LinkedIn、YouTube、Kaggle 和 GitHub 上與我聯絡,獲取更多相關內容。謝謝!

參考來源

Taiwan-LLaMa Service: 使用FastAPI 部署成一個服務

PrimeHub — Our end-to-end MLOps platform is the entire machine learning lifecycle in one platform. ... Deploy Your Own API using FastAPI + Docker ...

來源: Infuseai.io

部署Machine Learning模型-使用Python,Pipeline, FastAPI,Docker, ...

了解從機器學習模型Machine Learning Model開發到部署的整個過程 · 了解如何用FastAPI開發高效的Web API · 了解如何使用Docker封裝FastAPI · 了解如何將封裝的API放到AWS EC2 ...

來源: Udemy

如何使用Streamlit 和FastAPI 构建即时机器学习Web 应用程序

完成所有数据分析、培训冠军模型并打包机器学习模型后,下一步是创建两个专用服务: 1 ) FastAPI 后端和2 ) Streamlit 前端。然后,这两个服务可以部署 ...

來源: NVIDIA Developer

Build Machine Learning Apps with Hugging Face

Using Spaces makes it easy to create and deploy ML-powered applications and demos in minutes. Recently, the Hugging Face team added support for ...

來源: Docker

Building a Machine Learning API with Python, FastAPI and Docker

Learn how to deploy a machine learning model with FastAPI and Docker.

來源: Medium

Index - FastAPI

FastAPI 是一個現代、快速(高效能)的web 框架,用於Python 並採用標準Python 型別提示。 主要特點包含: ... * 基於內部開發團隊在建立生產應用程式時的測試預估。

來源: FastAPI

tiangolo/full-stack-fastapi-template

Full stack, modern web application template. Using FastAPI, React, SQLModel, PostgreSQL, Docker, GitHub Actions, automatic HTTPS and more. License. MIT license.

來源: GitHub

Deploying Your FastAPI Applications on Huggingface Via Docker

Step 1: Create a new Docker Space. image/png. Next, you can ... TextGen/router.py - A Python script where we will write our FastAPI app.

來源: Hugging Face

J.D.

專家

相關討論

❖ 相關專欄