> 백엔드 개발 > 파이썬 튜토리얼 > 포옹하는 얼굴 모델을 AWS Lambda에 몇 단계로 배포

포옹하는 얼굴 모델을 AWS Lambda에 몇 단계로 배포

Linda Hamilton
풀어 주다: 2024-11-29 21:24:11
원래의
729명이 탐색했습니다.

Hugging Face 모델을 AWS Lambda에 배포하고 싶었지만 컨테이너 빌드, 콜드 스타트 ​​및 모델 캐싱으로 인해 막힌 적이 있으십니까? Scaffoldly를 사용하여 5분 안에 완료하는 방법은 다음과 같습니다.

TL;DR

  1. AWS에서 .cache라는 EFS 파일 시스템을 생성합니다.

    • AWS EFS 콘솔로 이동
    • "파일 시스템 생성"을 클릭하세요
    • 이름을 .cache로 지정하세요.
    • VPC를 선택하세요(나머지는 스캐폴드에서 처리합니다!)
  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 scaffoldly Deploy 명령의 출력은 다음과 같습니다.

Deploy Hugging Face Models to AWS Lambda in teps

실제 성능 및 비용

비용: AWS Lambda, ECR 및 EFS의 경우 ~$0.20/일

콜드 스타트: 첫 번째 요청에 최대 20초(모델 로딩)

따뜻한 요청: 5~20초(CPU 기반 추론)

이 설정은 CPU 추론(GPU보다 느림)을 사용하지만 ML 모델을 실험하거나 트래픽이 적은 엔드포인트를 제공하는 데 매우 비용 효율적인 방법입니다.

다른 모델에 대한 사용자 정의

다른 모델을 사용하고 싶으신가요? 두 개의 파일을 업데이트하세요:

  1. app.py에서 모델을 변경합니다.
 npx scaffoldly create app --template python-huggingface
로그인 후 복사
로그인 후 복사
  1. scaffoldly.json에서 다운로드를 업데이트합니다.
 cd my-app && npx scaffoldly deploy
로그인 후 복사
로그인 후 복사

비공개 또는 제한 모델 사용

Scaffoldly는 HF_TOKEN 환경 변수를 통해 비공개 및 게이트 모델을 지원합니다. 다양한 방법으로 Hugging Face 토큰을 추가할 수 있습니다:

  • 로컬 개발: 셸 프로필(.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 Actions 비밀로 추가:
// 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 Action도 생성합니다.

// 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는 오픈 소스이며 커뮤니티의 기여를 환영합니다.

  • 예제는 Apache-2.0 라이선스로 라이선스가 부여됩니다.
  • Scaffoldly 툴체인은 FSL-1.1-Apache-2.0 라이선스로 라이선스가 부여됩니다.

AWS Lambda에서 실행하고 싶은 다른 모델은 무엇입니까? 댓글로 알려주세요!

위 내용은 포옹하는 얼굴 모델을 AWS Lambda에 몇 단계로 배포의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿