휴대용 기기에 Hailo-8을 탑재하여 추론(Inference) 비용 지불을 중단한 이야기
요약
클라우드 AI의 높은 비용과 지연 시간, 프라이버시 문제를 해결하기 위해 Hailo-8 AI 가속기를 활용한 에지 컴퓨팅 구현 사례를 소개합니다. Raspberry Pi 5와 Hailo-8을 결합하여 저전력으로 실시간 객체 탐지 및 비전 작업을 수행하는 방법을 다룹니다.
핵심 포인트
- 클라우드 API 의존 시 발생하는 비용, 지연 시간, 프라이버시 문제 지적
- Hailo-8 모듈의 저전력(2.5~3W) 및 높은 성능(26 TOPS) 특징 설명
- Raspberry Pi 5와 PCIe를 통한 Hailo-8 결합 구성 방법 제시
- 에지 디바이스에서의 실시간 객체 탐지 및 비전 작업 효율성 강조
클라우드 AI는 구독 함정입니다. 저는 재킷 주머니에 들어가는 크기에 3와트(watts)로 작동하는 탈출구를 만들었습니다.
저는 생각하는 데 임대료를 내는 것에 지쳤습니다.
제가 어떻게 이 일을 해냈는지, 무엇이 고장 났는지, 그리고 왜 여러분도 아마 이 작업을 수행해야 하는지에 대해 말씀드리겠습니다.
추론 세금(Inference Tax)이 당신의 프로젝트를 죽이고 있습니다
우리는 미친 일을 정상적인 것으로 받아들였습니다. 자신의 사진을 보거나, 자신의 음성 메모를 전사하거나, 자신의 뒷마당에서 물체를 감지하는 것과 같이 상상할 수 있는 가장 개인적인 컴퓨팅 작업들을 가져와서, 이를 기업으로 스트리밍하는 것이 최선의 방법이라고 결정했습니다.
단순히 돈 문제만은 아닙니다. 물론 돈 문제도 매우 불쾌합니다. 비전(vision)에 여기저기 5달러, 임베딩(embeddings)에 20달러, 당신의 사이드 프로젝트가 약간의 탄력을 받으면 또 다른 50달러가 나갑니다. 문제는 취약성입니다. WiFi가 끊기면 당신의 로봇도 작동을 멈춥니다. 벤더가 가격을 변경하면 당신의 현장 도구는 작동을 멈춥니다. 당신의 프라이버시 중심 앱은 모든 프레임을 당신이 제어할 수 없는 엔드포인트(endpoint)로 보내기 때문에 전혀 프라이버시를 보호하지 못합니다.
저는 하드웨어 작업을 위한 포켓 정찰 도구를 만들고 있었습니다. 실시간 객체 탐지(object detection), 번호판 블러(license plate blur), 그리고 나중에는 로컬 시각적 질의응답(visual question answering)이 필요했습니다. 클라우드 API를 사용하면 지연 시간(latency), 비용, 그리고 제가 원하지 않는 기록(paper trail)이 남는다는 것을 의미했습니다. Pi 5 CPU에서 로컬로 실행하면 초당 약 2프레임(frames per second) 정도였고, CPU는 열 스로틀링(thermal throttling)으로 인해 비참할 정도로 성능이 저하되었습니다.
저에게는 전용 실리콘(dedicated silicon)이 필요했습니다. 거대한 GPU가 아니라, 메스(scalpel) 같은 정밀한 것이 필요했습니다.
이 가격에 존재해서는 안 될 칩, Hailo-8의 등장
만약 아직 사용해 보지 않으셨다면, Hailo-8은 가장 좋은 의미에서 기묘한 제품입니다. 이것은 SSD처럼 보이는 M.2 2242 또는 2280 모듈이며, 부하 상태에서 약 2.5~3와트(watts)를 소모하고 26 TOPS를 주장합니다. 그 수치는 INT8 기준의 피크(peak) 성능이지만, 실제 환경의 오버헤드(overhead)를 고려하더라도 이 전력 범위 내에서는 그 어떤 CPU나 통합 GPU(integrated GPU)도 압도적으로 능가합니다.
더 중요한 것은, 이 장치가 에지(edge)를 위해 설계되었다는 점입니다. 머리 크기만 한 팬(fan)을 필요로 하지 않습니다. 그저 PCIe 레인(lane) 하나와 수행할 작업만 있으면 됩니다. 객체 탐지(Object detection), 포즈 추정(pose estimation), 세그멘테이션(segmentation), 깊이(depth), 얼굴 인식(face recognition), CLIP 임베딩(embeddings), 소형 비전 트랜스포머(small vision transformers)까지. 요청당 500ms의 비용을 지불하며 OpenAI나 Google에 대신 해달라고 요청했던 그 모든 작업들 말입니다.
저는 이를 Raspberry Pi 5 8GB와 결합했습니다. Pi 5가 지구상에서 가장 강력한 보드이기 때문이 아니라, 구하기 쉽고, FPC를 통해 실제 PCIe 레인이 노출되어 있으며, 커뮤니티가 전원이나 NVMe와 같은 지루한 문제들을 이미 해결해 놓았기 때문입니다.
저의 베이스 구성은 다음과 같습니다:
액티브 쿨러(active cooler)를 장착한 Pi 5 8GB
모델 및 데이터셋용 1TB NVMe가 포함된 Pimoroni NVMe Base
NVMe 베이스 위 또는 PCIe 스위치를 통한 Hailo-8 M.2 M key 모듈
Waveshare 4.3인치 DSI 터치스크린 또는 이와 유사한 핸드헬드 쉘(handheld shell)
5V 5A 출력을 지원하는 10000mAh PD 배터리
안전한 종료를 위한 PiSugar 또는 커스텀 UPS
총 비용은 얼마나 재활용(scavenge)하느냐에 따라 약 220달러에서 280달러 사이입니다. 실제로 도구를 제대로 사용한다면, 중간 단계 클라우드 추론(inference) 비용 6개월 치보다 저렴합니다.
정확한 배선, 서멀 패드(thermal pad) 배치, 그리고 레인(lane) 경쟁 없이 NVMe 슬롯과 Hailo를 위한 M.2 E key를 모두 실제로 노출하는 NVMe HAT이 무엇인지 알고 싶다면, 제가 **Offline AI Cyberdeck Pack**에 모두 담아두었습니다. 여기에는 Pi 5 NVMe 빌드, Hailo-8 통합, 키보드 및 센서 입력을 위한 Pico W 사이드킥(sidekick), 그리고 나중에 두 번째 Pi를 추가하고 싶을 경우를 위한 클러스터(cluster) 설정이 포함되어 있습니다. 덕분에 저는 고장 난 M.2 어댑터 3개를 아낄 수 있었습니다.
과학 실험 과제처럼 느껴지지 않는 핸드헬드 만들기
대부분의 사이버덱(cyberdeck) 빌드는 저급 영화에 나오는 폭탄처럼 보입니다. 사방에 널린 전선, 노출된 PCB, 그리고 배터리를 고정하는 것은 오직 기도뿐이죠. 저는 실제로 들고 다닐 수 있는 무언가를 원했습니다.
저는 ASA 소재로 두 부분으로 나뉜 클램쉘(clamshell) 형태의 분할 케이스를 출력했습니다. Pi 5 액티브 쿨러(active cooler)와 Hailo 모듈 바로 위에 통풍구가 있도록 설계했습니다. Hailo-8은 뜨거워지긴 하지만 엄청나게 뜨거운 수준은 아닙니다. 케이스에 서멀 패드(thermal pad)를 붙이거나 작은 구리 심(copper shim)을 사용하기만 하면 됩니다. 저는 알루미늄 NVMe 히트싱크(heatsink)에 1.5mm 소프트 패드를 사용했고, 즉시 온도가 18°C 떨어졌습니다.
전력은 실제 설계상의 제약 사항입니다. Pi 5는 까다롭습니다. 만약 전압이 처지는(saggy) 5V를 공급하면, 성능을 제한(throttle)하며 당신을 조롱할 것입니다. 저는 부하가 걸릴 때 4.6V로 떨어지는 저가형 USB 보조 배터리가 아니라, 20V PD 뱅크에서 5V 5A로 설정된 PD 트리거 보드(PD trigger board)를 사용했습니다. 안정적인 전력은 안정적인 PCIe를 의미하며, 이는 추론(inference) 도중에 Hailo가 사라지지 않음을 의미합니다.
OS 측면에서는 커널(kernel) 6.6 버전의 Raspberry Pi OS Lite 64 bit를 사용했고, HailoRT 4.18을 실행했습니다. 드라이버 설치는 이제 고통스럽지 않습니다. 1년 전만 해도 그렇지 않았습니다. 모델 주(model zoo)는 실제로 유용합니다. YOLOv8m, YOLOv8 pose, MobileNet, ArcFace가 모두 Hailo용으로 사전 컴파일(pre-compiled)되어 있습니다. 커스텀 모델의 경우, Docker에서 실행되는 그들의 Dataflow Compiler를 사용하여 컴파일하며, 이는 약간의 학습이 필요합니다.
hailortcli run yolov8m.hef를 실행하고, 키보드 백라이트보다 적은 전력을 사용하는 칩에서 120+ FPS를 보는 순간 모든 것이 이해됩니다. 그때 당신은 자신이 그동안 속아왔다는 사실을 깨닫게 됩니다.
소프트웨어 지옥이야말로 재미가 있는 곳이다
하드웨어는 쉽습니다. 소프트웨어는 대부분의 사람들이 포기하고 다시 Sam Altman에게 매달 20달러를 지불하러 돌아가는 지점입니다.
당신은 파이프라인(pipeline)을 다시 생각해야 합니다. 더 이상 엔드포인트(endpoint)를 호출하는 것이 아닙니다. 당신은 데이터플로우(dataflow)를 구축하는 것입니다.
제 스택(stack)은 다음과 같습니다:
libcamera 또는 picamera2를 통한 카메라 -> 가능한 경우 제로 카피(zero copy)를 이용한 CPU에서의 전처리(preprocessing) -> Hailo 추론(inference) -> NumPy를 이용한 후처리(postprocessing) 또는 속도가 필요한 경우 C++에서의 후처리 -> 결과를 로컬 LLM 또는 화면 위 오버레이(overlay)로 전달
시각 언어(vision language) 관련 작업의 경우, llama.cpp를 사용하여 Pi 5 CPU에서 양자화된(quantized) LLaVA 또는 Moondream 2를 실행하지만, 이미지 임베딩(embeddings)은 Hailo로부터 가져옵니다. 이 하이브리드 설정은 마법 같습니다. Hailo는 자신이 가장 잘하는 일인 대규모 병렬 텐서 연산(parallel tensor math)을 수행하고, CPU는 자신이 가장 잘하는 일인 순차적 로직(sequential logic) 및 토큰 생성(token generation)을 수행합니다. "내가 무엇을 보고 있는가"에 대한 지연 시간(Latency)은 클라우드 왕복 시 1.8초에서 완전히 오프라인 상태일 때 약 0.4초로 단축되었습니다.
네, 당신은 터미널(terminal) 속에서 살게 될 것입니다. GStreamer와 싸우게 될 것입니다. hailo_platform에 대해 원치 않았던 것보다 더 많은 것을 배우게 될 것입니다. 그것이 핵심입니다. 당신은 프롬프트 엔지니어(prompt engineer)로 머무는 것을 멈추고 다시 운영자(operator)가 되기 시작하는 것입니다.
저는 이를 위해 dotfiles, udev 규칙, hailort 서비스 파일, 모델 교체를 위한 bash 래퍼(wrappers) 등 전체 워크플로우를 통합하여 이제 모든 빌드에서 재사용하는 설정으로 만들었습니다. 만약 dtparam=pciex1을 잊었다는 사실을 깨닫기 위해 세 시간 동안 드라이버 디버깅을 하는 것을 싫어한다면, **Terminal Operator Pack**은 말 그대로 그 시스템입니다. 이것은 Black Terminal, Seamless Terminal, Bash Necromancer, Defensive Scripters, 그리고 Scriptkit을 한곳에 모아놓은 것입니다. 이것은 Pi를 장난감이 아니라, 현장에서 던져버리고 싶지 않은 상태로 실제로 운영할 수 있는 워크스테이션(workstation)으로 바꿔줍니다.
주머니 속의 26 TOPS가 실제로 느껴지는 방식
모호한 약속은 AI 스타트업들이나 하는 것이므로, 구체적으로 말씀드리겠습니다.
배터리 사용, 핸드헬드(handheld), 팬 소음 없음 상태에서:
YOLOv8m 640x640: 130~145 FPS, 사람, 자동차, 도구 탐지(detection)가 매우 안정적임
YOLOv8s Pose: 90 FPS, 어두운 차고에서도 작동하는 전체 스켈레톤 트래킹(skeleton tracking)
CLIP ViT-B/32 임베딩(embeddings): 본인의 사진에 대한 로컬 시맨틱 검색(semantic search) 시 초당 약 400장의 이미지 처리
ArcFace를 이용한 얼굴 인식(Face recognition): 5,000개의 로컬 얼굴에 대한 갤러리 검색 시 40ms 미만
번호판 탐지 및 블러(blur) 처리: 720p에서 여유 성능을 남겨둔 채 실시간 작동
또한 로컬(local)이기 때문에 API 페널티(penalty) 없이 모델들을 체이닝(chaining)할 수 있습니다. 사람을 탐지(detect)하고, 크롭(crop)하고, 포즈(pose)를 실행하고, 얼굴 블러(face blur)를 실행하고, 행동 분류(action classification)를 실행합니다. 클라우드(cloud) 환경이었다면 네 번의 유료 호출(billable calls)과 1초의 추가 지연 시간(latency)이 발생했을 것입니다. 로컬에서는 하드웨어 비용을 제외하면 추가 비용이 들지 않는 단일 프레임 파이프라인(frame pipeline)입니다.
저에게 킬러 앱(killer app)은 단일 모델이 아니었습니다. 그것은 바로 구성 가능성(composability)이었습니다. 저는 하드웨어 워크(hardware walks)를 위한 모드를 구축했습니다. 이 모드는 전자 제품을 탐지하고, 작은 OCR 모델로 칩 마킹(chip markings)을 읽으며, 로컬 오프라인 데이터베이스에서 핀아웃(pinouts)을 조회한 뒤 정보를 오버레이(overlay)합니다. 모든 과정이 오프라인으로 이루어집니다. 극적으로 표현하자면, 파라데이 백(Faraday bag) 안에서도 가능합니다.
데이터가 학습 세트(training set)에 포함되지 않도록 하면서 GPT-4V로 이 작업을 수행해 보십시오.
카메라 피드가 실제로 집 밖을 나가고 있다면, 당신은 편집증 환자가 아닙니다
사람들이 차마 입 밖으로 꺼내지 못하는 부분이 여기 있습니다. 만약 당신의 보안 카메라, 베이비 모니터, 작업장 카메라, 또는 정찰 도구가 무엇을 보고 있는지 이해하기 위해 인터넷이 필요하다면, 그것은 당신의 도구가 아닙니다. 당신이 상품이자 데이터 소스(data source)입니다.
추론(inference)을 로컬로 옮기는 것은 단순한 성능 트릭이 아닙니다. 그것은 프라이버시 경계(privacy boundary)입니다. 텔레메트리(telemetry)도 없고, 당신이 신뢰해야 하는 데이터 보관 정책(retention policy)도 없습니다. 47번째 문단에 숨겨진 "모델 개선을 위해 귀하의 입력을 사용할 수 있습니다"와 같은 조항도 없습니다.
로컬로 전환하면서 저는 기기 전체를 잠갔습니다. 호스트 이름이 유출되는 mDNS나 Avahi를 차단했고, 현장 작업을 위해 부팅 시 MAC 주소를 무작위화(randomized)했으며, 모델과 캡처 데이터를 위해 NVMe 파티션을 암호화하고, 내보내기 시 기본적으로 메타데이터를 제거(stripped)했습니다. 당신의 휴대용 기기가 이제 개인적인 공간의 수 시간 분량의 비디오를 담고 있다는 사실을 깨닫기 전까지는, 이것이 과잉 대응처럼 들릴 수도 있습니다.
이것이 마침내 저의 오프라인 설정을 완벽하게 만든 스택입니다. **Privacy/Opsec Stack**은 Nukepack, Ghost Mode, OSINT Pivots, 메타데이터 처리(Metadata handling), 그리고 AI 네이티브 OSINT 워크플로우(AI Native OSINT workflows)를 다룹니다. 저는 이제 제가 만드는 모든 사이버덱(cyberdeck)에 Ghost Mode 부트 프로필과 그 안에 포함된 메타데이터 제거 스크립트를 사용합니다. 만약 여러분이 컴퓨팅 자원을 소유하기 위해 추론(Inference) 비용 지불을 중단하고자 한다면, 여러분의 흔적(footprint) 또한 소유하는 것이 마땅할 것입니다.
이것을 구축해야 할까요
만약 여러분이 토큰당 비용을 지불하는 것을 즐기고 지연 시간(latency)이 매력적이라고 생각한다면, 아니요.
만약 여러분이 비행기 안에서, 지하실에서, 숲속에서, 다른 나라에서, 시위 현장에서, 혹은 게스트 WiFi가 없는 고객사 현장에서 작동하는 기기를 원한다면, 네. 구축하십시오.
PCIe 레인 설정(PCIe lane configs) 및 모델 양자화(model quantization)와 씨름하는 주말 한 번이, API를 호출하며 보내는 한 달보다 실제 AI 배포(AI deployment)에 대해 더 많은 것을 가르쳐 줄 것입니다. 여러분은 결국 OpenAI가 다운되든, 계정이 플래그(flagged)되든, 혹은 벤더(vendor)가 여러분의 사용 사례를 더 이상 허용하지 않기로 결정하든 상관하지 않는 도구를 갖게 될 것입니다.
클라우드는 거대 모델을 학습(training)시키는 데는 훌륭합니다. 하지만 그것들을 매일 사용하는 데는 최악입니다.
이제 저의 휴대용 기기는 Flipper 및 노트북과 함께 제 가방 속에 들어 있습니다. 11초 만에 부팅됩니다. 로그인을 요구하지 않습니다. 광고를 보여주지 않습니다. 그저 보고 있을 뿐입니다.
저는 휴대용 기기에 Hailo-8을 넣었고 추론 비용 지불을 중단했습니다. 여러분은 여러분의 API 키를 계속 가지셔도 좋습니다. 저는 저의 TOPS를 계속 가져가겠습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기