> 백엔드 개발 > 파이썬 튜토리얼 > FLUX, Python 및 Diffuser를 사용하여 AI 기반 이미지 생성 API 서비스 만들기

FLUX, Python 및 Diffuser를 사용하여 AI 기반 이미지 생성 API 서비스 만들기

Barbara Streisand
풀어 주다: 2024-11-29 17:36:10
원래의
631명이 탐색했습니다.

Creating an AI-powered Image Generation API Service with FLUX, Python, and Diffusers

FLUX(Black Forest Labs 제작)는 지난 몇 달 동안 AI 이미지 생성 세계를 휩쓸었습니다. 많은 벤치마크에서 Stable Diffusion(이전 오픈 소스의 왕)을 능가했을 뿐만 아니라 일부 지표에서는 Dall-E 또는 Midjourney와 같은 독점 모델을 능가했습니다.

그런데 귀하의 앱 중 하나에서 FLUX를 사용하려면 어떻게 하시겠습니까? Replicate 등의 서버리스 호스트를 사용하는 것을 생각할 수도 있지만 비용이 매우 빨리 들고 필요한 유연성을 제공하지 못할 수도 있습니다. 바로 여기서 자신만의 맞춤형 FLUX 서버를 만드는 것이 유용합니다.

이 기사에서는 Python을 사용하여 자신만의 FLUX 서버를 만드는 방법을 안내합니다. 이 서버를 사용하면 간단한 API를 통해 텍스트 프롬프트를 기반으로 이미지를 생성할 수 있습니다. 이 서버를 개인 용도로 실행하든, 프로덕션 애플리케이션의 일부로 배포하든, 이 가이드는 시작하는 데 도움이 될 것입니다.

전제조건

코드를 살펴보기 전에 필요한 도구와 라이브러리가 설정되어 있는지 확인하세요.

  • Python: 컴퓨터에 Python 3, 가급적 버전 3.10이 설치되어 있어야 합니다.
  • 토치: FLUX를 실행하는 데 사용할 딥 러닝 프레임워크입니다.
  • 디퓨저: FLUX 모델에 대한 액세스를 제공합니다.
  • Transformers: 디퓨저의 필수 종속성.
  • 문장: FLUX 토크나이저를 실행하는 데 필요합니다
  • protobuf: FLUX를 실행하는 데 필요합니다
  • 가속: 경우에 따라 FLUX 모델을 보다 효율적으로 로드하는 데 도움이 됩니다.
  • fastapi: 이미지 생성 요청을 수락할 수 있는 웹 서버를 생성하는 프레임워크.
  • uvicorn: FastAPI 서버를 실행하는 데 필요합니다.
  • psutil: 컴퓨터에 RAM이 얼마나 있는지 확인할 수 있습니다.

다음 명령을 실행하여 모든 라이브러리를 설치할 수 있습니다: pip install torch 확산기 Transformers 문장 조각 protobuf 가속 fastapi uvicorn

M1 또는 M2 칩이 탑재된 Mac을 사용하는 경우 최적의 성능을 위해 PyTorch를 Metal로 설정해야 합니다. 계속하기 전에 공식 PyTorch with Metal 가이드를 따르세요.

또한 GPU 장치에서 FLUX를 실행할 계획이라면 최소 12GB의 VRAM이 있는지 확인해야 합니다. 또는 CPU/MPS에서 실행하려면 최소 12GB RAM(더 느려짐).

1단계: 환경 설정

사용 중인 하드웨어를 기반으로 추론을 실행하는 데 적합한 장치를 선택하여 스크립트를 시작하겠습니다.

device = 'cuda' # can also be 'cpu' or 'mps'

import os

# MPS support in PyTorch is not yet fully implemented
if device == 'mps':
  os.environ["PYTORCH_ENABLE_MPS_FALLBACK"] = "1"

import torch

if device == 'mps' and not torch.backends.mps.is_available():
      raise Exception("Device set to MPS, but MPS is not available")
elif device == 'cuda' and not torch.cuda.is_available():
      raise Exception("Device set to CUDA, but CUDA is not available")
로그인 후 복사
로그인 후 복사
로그인 후 복사

cpu, cuda(NVIDIA GPU의 경우) 또는 mps(Apple의 Metal Performance Shader의 경우)를 지정할 수 있습니다. 그런 다음 스크립트는 선택한 장치를 사용할 수 있는지 확인하고 그렇지 않은 경우 예외를 발생시킵니다.

2단계: FLUX 모델 로드

다음으로 FLUX 모델을 로드합니다. 품질 저하 없이 메모리를 절약할 수 있는 fp16 정밀도로 모델을 로드하겠습니다.

이 시점에서 FLUX 모델이 제한되어 있으므로 HuggingFace로 인증하라는 메시지가 표시될 수 있습니다. 성공적으로 인증하려면 HuggingFace 계정을 만들고 모델 페이지로 이동하여 약관에 동의한 다음 계정 설정에서 HuggingFace 토큰을 만들고 컴퓨터에 HF_TOKEN 환경 변수로 추가해야 합니다.

device = 'cuda' # can also be 'cpu' or 'mps'

import os

# MPS support in PyTorch is not yet fully implemented
if device == 'mps':
  os.environ["PYTORCH_ENABLE_MPS_FALLBACK"] = "1"

import torch

if device == 'mps' and not torch.backends.mps.is_available():
      raise Exception("Device set to MPS, but MPS is not available")
elif device == 'cuda' and not torch.cuda.is_available():
      raise Exception("Device set to CUDA, but CUDA is not available")
로그인 후 복사
로그인 후 복사
로그인 후 복사

여기에서는 디퓨저 라이브러리를 사용하여 FLUX 모델을 로드합니다. 우리가 사용하는 모델은 fp16 정밀도로 로드된 black-forest-labs/FLUX.1-dev입니다.

추론 속도는 더 빠르지만 덜 상세한 이미지를 출력하는 FLUX Schnell이라는 시간 단계 증류 모델과 비공개 소스인 FLUX Pro 모델도 있습니다.
여기서는 오일러 스케줄러를 사용하겠지만 이를 실험해 볼 수도 있습니다. 여기에서 스케줄러에 대해 자세히 알아볼 수 있습니다.
이미지 생성은 리소스 집약적일 수 있으므로 특히 CPU나 메모리가 제한된 장치에서 실행되는 경우 메모리 사용량을 최적화하는 것이 중요합니다.

from diffusers import FlowMatchEulerDiscreteScheduler, FluxPipeline
import psutil

model_name = "black-forest-labs/FLUX.1-dev"

print(f"Loading {model_name} on {device}")

pipeline = FluxPipeline.from_pretrained(
      model_name,

      # Diffusion models are generally trained on fp32, but fp16
      # gets us 99% there in terms of quality, with just half the (V)RAM
      torch_dtype=torch.float16,

      # Ensure we don't load any dangerous binary code
      use_safetensors=True

      # We are using Euler here, but you can also use other samplers
      scheduler=FlowMatchEulerDiscreteScheduler()
).to(device)
로그인 후 복사
로그인 후 복사

이 코드는 사용 가능한 총 메모리를 확인하고 시스템의 RAM이 64GB 미만인 경우 주의 슬라이싱을 활성화합니다. 어텐션 슬라이싱은 이미지 생성 중 메모리 사용량을 줄여줍니다. 이는 리소스가 제한된 기기에 필수적입니다.

3단계: FastAPI를 사용하여 API 생성

다음으로 이미지 생성을 위한 API를 제공하는 FastAPI 서버를 설정하겠습니다.

# Recommended if running on MPS or CPU with < 64 GB of RAM
total_memory = psutil.virtual_memory().total
total_memory_gb = total_memory / (1024 ** 3)
if (device == 'cpu' or device == 'mps') and total_memory_gb < 64:
      print("Enabling attention slicing")
      pipeline.enable_attention_slicing()
로그인 후 복사
로그인 후 복사

FastAPI는 Python으로 웹 API를 구축하는 데 널리 사용되는 프레임워크입니다. 이 경우 이를 사용하여 이미지 생성 요청을 수락할 수 있는 서버를 생성합니다. 또한 응답을 압축하기 위해 GZip 미들웨어를 사용하고 있는데, 이는 이미지를 base64 형식으로 다시 보낼 때 특히 유용합니다.

프로덕션 환경에서는 생성된 이미지를 S3 버킷이나 기타 클라우드 스토리지에 저장하고 base64로 인코딩된 문자열 대신 URL을 반환하여 CDN 및 기타 최적화를 활용할 수 있습니다.

4단계: 요청 모델 정의

이제 API가 수락할 요청에 대한 모델을 정의해야 합니다.

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, Field, conint, confloat
from fastapi.middleware.gzip import GZipMiddleware
from io import BytesIO
import base64

app = FastAPI()

# We will be returning the image as a base64 encoded string
# which we will want compressed
app.add_middleware(GZipMiddleware, minimum_size=1000, compresslevel=7)
로그인 후 복사
로그인 후 복사

이 생성 요청 모델은 이미지를 생성하는 데 필요한 매개변수를 정의합니다. 프롬프트 필드는 생성하려는 이미지에 대한 텍스트 설명입니다. 다른 필드에는 이미지 크기, 추론 단계 수 및 배치 크기가 포함됩니다.

5단계: 이미지 생성 엔드포인트 생성

이제 이미지 생성 요청을 처리할 엔드포인트를 만들어 보겠습니다.

device = 'cuda' # can also be 'cpu' or 'mps'

import os

# MPS support in PyTorch is not yet fully implemented
if device == 'mps':
  os.environ["PYTORCH_ENABLE_MPS_FALLBACK"] = "1"

import torch

if device == 'mps' and not torch.backends.mps.is_available():
      raise Exception("Device set to MPS, but MPS is not available")
elif device == 'cuda' and not torch.cuda.is_available():
      raise Exception("Device set to CUDA, but CUDA is not available")
로그인 후 복사
로그인 후 복사
로그인 후 복사

이 엔드포인트는 이미지 생성 프로세스를 처리합니다. 먼저 FLUX에서 요구하는 대로 높이와 너비가 8의 배수인지 확인합니다. 그런 다음 제공된 프롬프트를 기반으로 이미지를 생성하고 이를 base64로 인코딩된 문자열로 반환합니다.

6단계: 서버 시작

마지막으로 스크립트 실행 시 서버를 시작하는 코드를 추가해 보겠습니다.

from diffusers import FlowMatchEulerDiscreteScheduler, FluxPipeline
import psutil

model_name = "black-forest-labs/FLUX.1-dev"

print(f"Loading {model_name} on {device}")

pipeline = FluxPipeline.from_pretrained(
      model_name,

      # Diffusion models are generally trained on fp32, but fp16
      # gets us 99% there in terms of quality, with just half the (V)RAM
      torch_dtype=torch.float16,

      # Ensure we don't load any dangerous binary code
      use_safetensors=True

      # We are using Euler here, but you can also use other samplers
      scheduler=FlowMatchEulerDiscreteScheduler()
).to(device)
로그인 후 복사
로그인 후 복사

이 코드는 포트 8000에서 FastAPI 서버를 시작하여 0.0.0.0 바인딩 덕분에 http://localhost:8000뿐만 아니라 호스트 컴퓨터의 IP 주소를 사용하는 동일한 네트워크의 다른 장치에서도 액세스할 수 있도록 합니다.

7단계: 로컬에서 서버 테스트

이제 FLUX 서버가 실행되고 있으므로 테스트할 시간입니다. HTTP 요청을 위한 명령줄 도구인 컬을 사용하여 서버와 상호 작용할 수 있습니다.

# Recommended if running on MPS or CPU with < 64 GB of RAM
total_memory = psutil.virtual_memory().total
total_memory_gb = total_memory / (1024 ** 3)
if (device == 'cpu' or device == 'mps') and total_memory_gb < 64:
      print("Enabling attention slicing")
      pipeline.enable_attention_slicing()
로그인 후 복사
로그인 후 복사

이 명령은 컬, jq 및 base64 유틸리티가 설치된 UNIX 기반 시스템에서만 작동합니다. FLUX 서버를 호스팅하는 하드웨어에 따라 완료하는 데 최대 몇 분이 걸릴 수도 있습니다.

결론

축하합니다! Python을 사용하여 자신만의 FLUX 서버를 성공적으로 만들었습니다. 이 설정을 사용하면 간단한 API를 통해 텍스트 프롬프트를 기반으로 이미지를 생성할 수 있습니다. 기본 FLUX 모델의 결과가 만족스럽지 않은 경우 특정 사용 사례에서 더 나은 성능을 위해 모델을 미세 조정하는 것을 고려할 수 있습니다.

전체 코드

아래에서 이 가이드에 사용된 전체 코드를 찾을 수 있습니다.

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, Field, conint, confloat
from fastapi.middleware.gzip import GZipMiddleware
from io import BytesIO
import base64

app = FastAPI()

# We will be returning the image as a base64 encoded string
# which we will want compressed
app.add_middleware(GZipMiddleware, minimum_size=1000, compresslevel=7)
로그인 후 복사
로그인 후 복사

위 내용은 FLUX, Python 및 Diffuser를 사용하여 AI 기반 이미지 생성 API 서비스 만들기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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