32 GB. 이는 Tomofun이 Furbo(반려동물 행동을 감지하는 스마트 카메라)의 실시간 추론 워크로드를 처리하기 위해 기존 GPU 기반 인프라에서 마주했던 비용 효율성 문제의 핵심 수치다. 32 GB 용량의 메모리를 점유하며 상시 가동되던 GPU 인스턴스는 수십만 대의 기기에서 발생하는 데이터를 처리하기에 지나치게 높은 비용을 요구했다. 그런데 이들은 모델의 구조를 완전히 뜯어고치는 대신, AWS Inferentia2(아마존이 설계한 AI 전용 추론 칩)를 활용해 비용 구조를 근본적으로 재설계하는 길을 택했다.
BLIP 모델의 모듈화와 컴파일 전략
Tomofun은 시각-언어 모델인 BLIP(이미지 이해와 생성을 통합한 사전 학습 모델, https://arxiv.org/abs/2201.12086)을 운영하며 GPU 비용을 줄이기 위해 모델을 세 가지 핵심 컴포넌트로 분리했다. 이미지 인코더, 텍스트 인코더, 텍스트 디코더로 구성된 BLIP의 각 요소를 독립적으로 컴파일하기 위해 torch_neuronx(AWS Inferentia 칩에서 PyTorch 모델을 실행하기 위한 라이브러리)를 활용했다. 이 과정에서 모델의 사전 학습된 로직을 변경하지 않기 위해 각 컴포넌트를 감싸는 경량 래퍼(Wrapper, 입출력 형식을 맞춰주는 어댑터 코드)를 도입했다.
래퍼를 통한 추론 파이프라인 최적화
예전에는 GPU 환경에서 모델 전체를 하나의 거대한 블록으로 실행했지만, 이제는 컴포넌트별로 분리된 래퍼를 통해 추론 파이프라인을 구성한다. 래퍼는 torch_neuronx.trace() API가 요구하는 텐서 입출력 형식을 맞추는 역할을 수행하며, 이를 통해 기존 PyTorch 코드를 수정하지 않고도 Inferentia2 환경에 즉시 배포할 수 있는 상태를 만든다. 다음은 텍스트 인코더를 컴파일하고 배포하는 과정의 핵심 코드다.
python
텍스트 인코더를 Neuron 최적화 형식으로 컴파일
models.text_encoder = TextEncoderWrapper.from_model(
torch.jit.load(os.path.join(directory, 'text_encoder.pt')))
추론 효율과 배포의 실제 변화
개발자가 체감하는 가장 큰 변화는 모델의 이식성이다. 컴파일 단계에서는 원본 모델의 서브모듈을 직접 참조하여 최적화를 진행하고, 배포 단계에서는 래퍼 클래스가 입출력을 관리함으로써 추론 파이프라인의 안정성을 확보했다. 이 방식은 수십만 대의 기기에서 발생하는 실시간 행동 감지 데이터를 처리할 때, GPU 인스턴스 대비 훨씬 낮은 비용으로 동일한 정확도와 처리량을 유지할 수 있게 한다. 특히 모델의 내부 로직을 건드리지 않고도 하드웨어 가속기를 교체할 수 있다는 점은 대규모 서비스 운영 환경에서 큰 이점으로 작용한다.
하드웨어 가속기 교체는 모델의 복잡한 코드 수정 없이도 아키텍처의 모듈화만으로 충분히 달성 가능하다.




