Fal.ai
Fal.ai
fal.ai는 생성형 AI 모델을 위한 서버리스 클라우드 플랫폼이에요. 이미지, 비디오, 오디오, 음악, 음성, 3D, 실시간 스트리밍까지 1,000개 이상의 최적화된 모델을 하나의 통합 API로 호출할 수 있고, 직접 만든 모델을 같은 인프라에 배포할 수도 있어요. 업계 최고 수준의 추론 속도, 99.99% 이상의 가동률, 하루 수십억 건의 요청까지 처리할 수 있는 확장성을 갖추고 있어서, 세계 최고의 AI 앱들이 사용하는 플랫폼이에요.
출처: 문서
본문
핵심 개념
서버리스 AI 추론 (Serverless Inference) fal.ai의 핵심은 GPU 인프라가 수요에 따라 0개에서 수천 개의 머신으로 자동 확장(autoscale)되는 서버리스 추론이에요. 사용한 만큼만 비용을 지불하는 pay-per-use 방식이라 요청이 없을 때는 비용이 들지 않아요. 모든 모델은 HTTP 엔드포인트로 노출되어 있고, 입력을 JSON으로 보내면 결과(미디어 URL 포함)를 JSON으로 받아요. H100, H200, A100 등 원하는 머신 타입을 고를 수 있어요.
큐/HTTP (Queue-based Inference)
fal의 추천 호출 방식은 비동기 큐(queue) 기반 방식이에요. submit()으로 요청을 제출하면 즉시 반환되고, 요청은 큐에 들어가 자동 재시도, 상태 추적, 무한 확장의 이점을 받아요. 요청은 IN_QUEUE → PROCESSING → COMPLETED 상태를 거치며, 결과는 폴링(polling)이나 웹훅(webhook)으로 받을 수 있어요. 반면 run() 같은 직접 호출은 큐를 거치지 않고 바로 runner에 연결되어 더 빠르지만 재시도와 상태 추적이 없어요. 이 두 경로는 같은 runner와 확장 인프라를 공유해요.
모델 배포 (Serverless Deployment)
직접 만든 모델이나 파이프라인도 같은 엔진 위에 배포할 수 있어요. fal.App이라는 Python 클래스를 작성하고, setup() 메서드에서 모델 가중치를 로드하고, @fal.endpoint 데코레이터로 API 엔드포인트를 정의해요. fal run으로 테스트하고 fal deploy로 배포하면, 자동 확장과 재시도가 포함된 영구 엔드포인트가 생성돼요. 기존 Docker 서버, Replicate, Modal, RunPod, Baseten에서도 마이그레이션할 수 있어요.
웹소켓 스트리밍 (WebSocket & Streaming)
실시간 저지연 애플리케이션을 위해 WebSocket 기반 연결을 제공해요. realtime()은 큐를 거치지 않고 영구 연결을 유지하며 sub-100ms 지연 시간을 목표로 해요. 스트리밍(stream())은 LLM의 토큰처럼 출력이 생성되는 대로 점진적으로 결과를 전달해줘요. @fal.realtime(path) 데코레이터로 실시간 WebSocket 엔드포인트를 직접 만들 수도 있고, SSE(Server-Sent Events) 스트리밍도 지원해요.
SDK 설치
pip install fal-client
npm install @fal-ai/client
API 키는 fal 대시보드에서 발급받아 환경 변수로 설정해요.
export FAL_KEY="your-api-key-here"
사용 예시
이미지 생성 (Python):
import fal_client
result = fal_client.subscribe("fal-ai/nano-banana-2", arguments={
"prompt": "a futuristic cityscape at sunset"
})
print(result["images"][0]["url"])
이미지 생성 (JavaScript):
import { fal } from "@fal-ai/client";
const result = await fal.subscribe("fal-ai/nano-banana-2", {
input: { prompt: "a futuristic cityscape at sunset" }
});
console.log(result.data.images[0].url);
cURL로 직접 호출:
curl -X POST "https://queue.fal.run/fal-ai/nano-banana-2" \
-H "Authorization: Key ***" \
-H "Content-Type: application/json" \
-d '{"prompt": "a futuristic cityscape at sunset"}'
모델 배포 예시 (Python):
import fal
from pydantic import BaseModel
class Input(BaseModel):
prompt: str
class MyModel(fal.App):
machine_type = "GPU-H100"
def setup(self):
self.model = load_my_model()
@fal.endpoint("/")
def generate(self, input: Input):
return self.model(input.prompt)
배포 명령어:
fal run my_app.py # cloud GPU에서 테스트
fal deploy my_app.py # 프로덕션 배포