주요 콘텐츠로 건너뛰기

Leapcell에 Hugging Face 앱 배포하기

이 튜토리얼에서는 Hugging Face ResNet 모델을 사용하여 이미지 분류 애플리케이션을 배포하는 방법을 보여줍니다.

배포 프로세스는 다른 Hugging Face 모델과 유사합니다. 모델 및 프로세서 이름만 변경하면 됩니다.

정보

계속하려면 GitHub 계정이 필요합니다. 계정이 없으면 GitHub 웹사이트에서 만들 수 있습니다.

1. GitHub에서 Hugging Face 이미지 분류 예제포크합니다.

저장소: Hugging Face 이미지 분류 예제

이 예제에서는 Hugging Face의 transformers 라이브러리의 사전 훈련된 모델을 사용하여 이미지를 분류합니다. 해당 저장소의 main.py 파일은 다음과 같습니다.

먼저 모델과 프로세서를 로드하는 load_model.py 파일이 필요합니다.

from transformers import AutoImageProcessor, ResNetForImageClassification

MODEL_PATH = "./model"

model_name = "microsoft/resnet-50"

model = ResNetForImageClassification.from_pretrained(model_name)
processor = AutoImageProcessor.from_pretrained(model_name)

# 지정된 경로에 저장
model.save_pretrained(MODEL_PATH)
processor.save_pretrained(MODEL_PATH)

다음으로 Flask 애플리케이션을 실행하는 app.py 파일이 필요합니다.

from flask import Flask, request
from PIL import Image
from transformers import AutoImageProcessor, ResNetForImageClassification
import torch
import base64
from io import BytesIO
import time

app = Flask(__name__)

# 로컬에 저장된 모델 경로
MODEL_PATH = "./model"

# HTML 템플릿
INDEX_HTML = """
<!DOCTYPE html>
<html>
<body>
<form action="/predict" method="post" enctype="multipart/form-data">
<label>Select image to upload:</label>
<input type="file" name="image">
<input type="submit" value="Upload Image">
</form>
</body>
</html>
"""

RESPONSE_HTML = """
<!DOCTYPE html>
<html>
<body>
<img src="data:image/png;base64,{img_base64}" alt="image" width="500" height="600">
<form action="/predict" method="post" enctype="multipart/form-data">
<label>Select image to upload:</label>
<input type="file" name="image">
<input type="submit" value="Upload Image">
</form>
<p>Prediction: {prediction}</p>
<p>Score: {score:.2f}</p>
<p>Time taken: {time_taken:.2f} seconds</p>
</body>
</html>
"""

# 로컬 경로에서 모델 및 프로세서 로드
model = ResNetForImageClassification.from_pretrained(MODEL_PATH)
processor = AutoImageProcessor.from_pretrained(MODEL_PATH)


@app.route("/")
def index():
"""업로드 페이지 렌더링."""
return INDEX_HTML


@app.route("/predict", methods=["POST"])
def predict():
"""이미지 업로드 처리, 예측 수행 및 결과 반환."""
start_time = time.time()

# 업로드된 이미지 파일 가져오기
img_file = request.files.get("image")
if not img_file:
return "No image uploaded. Please upload a valid image."

# 예측을 위해 이미지 처리
img = Image.open(img_file)
inputs = processor(img, return_tensors="pt")
with torch.no_grad():
logits = model(**inputs).logits
predicted_label = logits.argmax(-1).item()
confidence_score = torch.softmax(logits, dim=-1)[0, predicted_label].item()

# HTML 응답에 표시하기 위해 이미지를 Base64로 인코딩
buffer = BytesIO()
img.save(buffer, format="PNG")
img_base64 = base64.b64encode(buffer.getvalue()).decode("utf-8")

# 경과 시간 계산
time_taken = time.time() - start_time

# 예측 결과가 있는 HTML 반환
return RESPONSE_HTML.format(
img_base64=img_base64,
prediction=predicted_label,
score=confidence_score,
time_taken=time_taken,
)


# Flask 애플리케이션 실행
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8080)

2. Leapcell 대시보드에서 서비스를 생성하고 새 저장소를 연결합니다.

Leapcell 대시보드로 이동하여 새 서비스 버튼을 클릭합니다.

"새 서비스" 페이지에서 방금 포크한 저장소를 선택합니다.

저장소에 액세스하려면 Leapcell을 GitHub 계정에 연결해야 합니다.

GitHub에 연결하려면 다음 지침을 따르세요.

연결되면 저장소가 목록에 나타납니다.

3. 생성 중에 다음 값을 제공합니다.

정보

Hugging Face 모델은 PyTorch를 기반으로 하므로 torchtransformers를 설치해야 합니다. pip install torch를 통해 직접 torch를 설치하면 많은 CUDA 관련 구성 요소가 포함됩니다. Leapcell 머신에는 GPU가 없으므로 이미지 크기가 불필요하게 늘어납니다. 대신 CPU 전용 버전의 torch를 설치합니다.

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu

또한 모델을 로드해야 합니다.

최종 빌드 명령은 다음과 같습니다.

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu && pip install -r requirements.txt && python load_model.py

또한 Gunicorn을 사용하여 앱을 실행합니다. **gunicorn**이 requirements.txt에 포함되어 있는지 확인합니다.

필드
런타임Python (모든 버전)
빌드 명령어pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu && pip install -r requirements.txt && python load_model.py
시작 명령어gunicorn -w 1 -b :8080 app:app
포트8080

해당 필드에 이러한 값을 입력합니다.

4. 앱에 액세스:

배포되면 배포 페이지에 foo-bar.leapcell.dev와 같은 URL이 표시됩니다. 서비스 페이지에 표시된 도메인을 방문하십시오.

지속적인 배포

연결된 브랜치에 대한 모든 푸시는 자동으로 빌드 및 배포를 트리거합니다. 빌드가 실패하면 안전하게 취소되어 다음 성공적인 배포까지 현재 버전이 실행된 상태로 유지됩니다.

지속적인 배포에 대해 자세히 알아보세요.