ホームページ バックエンド開発 Python チュートリアル teps でハグ顔モデルを AWS Lambda にデプロイする

teps でハグ顔モデルを AWS Lambda にデプロイする

Nov 29, 2024 pm 09:24 PM

Hugging Face モデルを AWS Lambda にデプロイしたいと考えていましたが、コンテナのビルド、コールド スタート、モデルのキャッシュで行き詰まったことはありませんか? Scaffoldly を使用して 5 分以内にこれを行う方法を次に示します。

TL;DR

  1. AWS で .cache という名前の EFS ファイルシステムを作成します:

    • AWS EFS コンソールに移動します
    • 「ファイルシステムの作成」をクリックします
    • .cache という名前を付けます
    • 任意の VPC を選択します (残りは Scaffoldly が処理します!)
  2. python-huggingface ブランチからアプリを作成します。

     npx scaffoldly create app --template python-huggingface
    
    ログイン後にコピー
    ログイン後にコピー
  3. デプロイします:

     cd my-app && npx scaffoldly deploy
    
    ログイン後にコピー
    ログイン後にコピー

それだけです! Lambda 上で実行される Hugging Face モデル (例として openai-community/gpt2 を使用) を取得し、適切なキャッシュとコンテナーのデプロイメントを完了します。

プロのヒント: EFS セットアップの場合、バースタブル モードの単一 AZ までカスタマイズしてさらにコストを節約できます。 Scaffoldly は、Lambda 関数を EFS の VPC、サブネット、セキュリティ グループと照合します。

✨ ライブデモとサンプルコードをチェックしてください!

問題

ML モデルを AWS Lambda にデプロイするには、従来は次のことが必要です。

  • Docker コンテナの構築と管理
  • モデルのキャッシュとストレージを理解する
  • Lambda のサイズ制限への対処
  • コールドスタートの管理
  • API エンドポイントのセットアップ

モデルを提供したいだけの場合、多くのインフラストラクチャ作業が必要です!

解決策

Scaffoldly は、この複雑さをすべて単純な構成ファイルで処理します。これは、Hugging Face モデルを提供する完全なアプリケーションです (例として openai-community/gpt2 を使用):

# app.py
from flask import Flask
from transformers import pipeline
app = Flask(__name__)
generator = pipeline('text-generation', model='openai-community/gpt2')
@app.route("/")
def hello_world():
    output = generator("Hello, world,")
    return output[0]['generated_text']
ログイン後にコピー
ログイン後にコピー
// requirements.txt
Flask ~= 3.0
gunicorn ~= 23.0
torch ~= 2.5
numpy ~= 2.1
transformers ~= 4.46
huggingface_hub[cli] ~= 0.26
ログイン後にコピー
ログイン後にコピー
// scaffoldly.json
{
  "name": "python-huggingface",
  "runtime": "python:3.12",
  "handler": "localhost:8000",
  "files": ["app.py"],
  "packages": ["pip:requirements.txt"],
  "resources": ["arn::elasticfilesystem:::file-system/.cache"],
  "schedules": {
    "@immediately": "huggingface-cli download openai-community/gpt2"
  },
  "scripts": {
    "start": "gunicorn app:app"
  },
  "memorySize": 1024
}
ログイン後にコピー
ログイン後にコピー

仕組み

Scaffoldly は舞台裏でいくつかの賢いことを行います:

  1. スマートコンテナビルディング:

    • Lambda に最適化された Docker コンテナを自動的に作成します
    • PyTorch を含むすべての Python 依存関係を処理します
    • Docker コマンドを作成しなくても ECR にプッシュされます
  2. 効率的なモデル処理:

    • Amazon EFS を使用してモデル ファイルをキャッシュします
    • 展開後にモデルを事前ダウンロードしてコールド スタートを高速化します
    • Lambda にキャッシュを自動的にマウントします
  3. Lambda 対応セットアップ:

    • 適切な WSGI サーバー (gunicorn) を起動します
    • パブリック Lambda 関数 URL を作成します
    • gunicorn へのプロキシ関数 URL リクエスト
    • IAM の役割と権限を管理します

デプロイの様子

この例で実行した npx scaffoldlydeploy コマンドの出力は次のとおりです。

Deploy Hugging Face Models to AWS Lambda in teps

実際のパフォーマンスとコスト

コスト: AWS Lambda、ECR、および EFS の場合、1 日あたり ~$0.20

コールド スタート: 最初のリクエスト (モデルの読み込み) に約 20 秒

ウォーム リクエスト: 5 ~ 20 秒 (CPU ベースの推論)

このセットアップでは CPU 推論 (GPU よりも遅い) が使用されますが、ML モデルを試したり、低トラフィックのエンドポイントにサービスを提供したりするには、非常にコスト効率の高い方法です。

他モデル用のカスタマイズ

別のモデルを使用したいですか? 2 つのファイルを更新するだけです:

  1. app.py のモデルを変更します。
 npx scaffoldly create app --template python-huggingface
ログイン後にコピー
ログイン後にコピー
  1. scaffoldly.json のダウンロードを更新します。
 cd my-app && npx scaffoldly deploy
ログイン後にコピー
ログイン後にコピー

プライベート モデルまたはゲート モデルの使用

Scaffoldly は、HF_TOKEN 環境変数を介してプライベート モデルとゲート モデルをサポートします。ハグ顔トークンはいくつかの方法で追加できます:

  • ローカル開発: シェル プロファイル (.bashrc、.zprofile など) に追加します。
# app.py
from flask import Flask
from transformers import pipeline
app = Flask(__name__)
generator = pipeline('text-generation', model='openai-community/gpt2')
@app.route("/")
def hello_world():
    output = generator("Hello, world,")
    return output[0]['generated_text']
ログイン後にコピー
ログイン後にコピー
  • CI/CD: GitHub アクション シークレットとして追加:
// requirements.txt
Flask ~= 3.0
gunicorn ~= 23.0
torch ~= 2.5
numpy ~= 2.1
transformers ~= 4.46
huggingface_hub[cli] ~= 0.26
ログイン後にコピー
ログイン後にコピー

トークンは、プライベート モデルまたはゲート モデルのダウンロードとアクセスの両方に自動的に使用されます。

CI/CD ボーナス

Scaffoldly は自動デプロイメント用の GitHub アクションも生成します:

// scaffoldly.json
{
  "name": "python-huggingface",
  "runtime": "python:3.12",
  "handler": "localhost:8000",
  "files": ["app.py"],
  "packages": ["pip:requirements.txt"],
  "resources": ["arn::elasticfilesystem:::file-system/.cache"],
  "schedules": {
    "@immediately": "huggingface-cli download openai-community/gpt2"
  },
  "scripts": {
    "start": "gunicorn app:app"
  },
  "memorySize": 1024
}
ログイン後にコピー
ログイン後にコピー

自分で試してみる

完全な例は GitHub で入手できます:
scaffoldly/scaffoldly-examples#python-huggingface

次のコマンドを実行すると、この例の独自のコピーを作成できます。

generator = pipeline('text-generation', model='your-model-here')
ログイン後にコピー

ライブで実行されているのが確認できます (ただし、CPU 推論により応答が遅くなる可能性があります)。
ライブデモ

次は何ですか?

  • さまざまなハグフェイス モデルを展開してみる
  • Discord の Scaffoldly コミュニティに参加してください
  • 他の例をチェックしてください
  • これが役立つと思われた場合は、リポジトリにスターを付けてください!
    • Scaffoldly ツールチェーン
    • Scaffoldly サンプル リポジトリ

ライセンス

Scaffoldly はオープンソースであり、コミュニティからの貢献を歓迎します。

  • サンプルには Apache-2.0 ライセンスが付与されています。
  • scaffoldly ツールチェーンは FSL-1.1-Apache-2.0 ライセンスでライセンスされています。

AWS Lambda で実行したい他のモデルは何ですか?コメント欄でお知らせください!

以上がteps でハグ顔モデルを AWS Lambda にデプロイするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? 中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? Apr 01, 2025 pm 11:15 PM

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? Apr 01, 2025 pm 10:51 PM

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

Investing.comの反クローラーメカニズムをバイパスするニュースデータを取得する方法は? Investing.comの反クローラーメカニズムをバイパスするニュースデータを取得する方法は? Apr 02, 2025 am 07:03 AM

Investing.comの反クラウリング戦略を理解する多くの人々は、Investing.com(https://cn.investing.com/news/latest-news)からのニュースデータをクロールしようとします。

See all articles