FLUX(Black Forest Labs 제작)는 지난 몇 달 동안 AI 이미지 생성 세계를 휩쓸었습니다. 많은 벤치마크에서 Stable Diffusion(이전 오픈 소스의 왕)을 능가했을 뿐만 아니라 일부 지표에서는 Dall-E 또는 Midjourney와 같은 독점 모델을 능가했습니다.
그런데 귀하의 앱 중 하나에서 FLUX를 사용하려면 어떻게 하시겠습니까? Replicate 등의 서버리스 호스트를 사용하는 것을 생각할 수도 있지만 비용이 매우 빨리 들고 필요한 유연성을 제공하지 못할 수도 있습니다. 바로 여기서 자신만의 맞춤형 FLUX 서버를 만드는 것이 유용합니다.
이 기사에서는 Python을 사용하여 자신만의 FLUX 서버를 만드는 방법을 안내합니다. 이 서버를 사용하면 간단한 API를 통해 텍스트 프롬프트를 기반으로 이미지를 생성할 수 있습니다. 이 서버를 개인 용도로 실행하든, 프로덕션 애플리케이션의 일부로 배포하든, 이 가이드는 시작하는 데 도움이 될 것입니다.
코드를 살펴보기 전에 필요한 도구와 라이브러리가 설정되어 있는지 확인하세요.
다음 명령을 실행하여 모든 라이브러리를 설치할 수 있습니다: pip install torch 확산기 Transformers 문장 조각 protobuf 가속 fastapi uvicorn
M1 또는 M2 칩이 탑재된 Mac을 사용하는 경우 최적의 성능을 위해 PyTorch를 Metal로 설정해야 합니다. 계속하기 전에 공식 PyTorch with Metal 가이드를 따르세요.
또한 GPU 장치에서 FLUX를 실행할 계획이라면 최소 12GB의 VRAM이 있는지 확인해야 합니다. 또는 CPU/MPS에서 실행하려면 최소 12GB RAM(더 느려짐).
사용 중인 하드웨어를 기반으로 추론을 실행하는 데 적합한 장치를 선택하여 스크립트를 시작하겠습니다.
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의 경우)를 지정할 수 있습니다. 그런 다음 스크립트는 선택한 장치를 사용할 수 있는지 확인하고 그렇지 않은 경우 예외를 발생시킵니다.
다음으로 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 미만인 경우 주의 슬라이싱을 활성화합니다. 어텐션 슬라이싱은 이미지 생성 중 메모리 사용량을 줄여줍니다. 이는 리소스가 제한된 기기에 필수적입니다.
다음으로 이미지 생성을 위한 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 및 기타 최적화를 활용할 수 있습니다.
이제 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)
이 생성 요청 모델은 이미지를 생성하는 데 필요한 매개변수를 정의합니다. 프롬프트 필드는 생성하려는 이미지에 대한 텍스트 설명입니다. 다른 필드에는 이미지 크기, 추론 단계 수 및 배치 크기가 포함됩니다.
이제 이미지 생성 요청을 처리할 엔드포인트를 만들어 보겠습니다.
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로 인코딩된 문자열로 반환합니다.
마지막으로 스크립트 실행 시 서버를 시작하는 코드를 추가해 보겠습니다.
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 주소를 사용하는 동일한 네트워크의 다른 장치에서도 액세스할 수 있도록 합니다.
이제 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!