Jetson 양산 OS 개발기 ⑤ · 바이코드(ByCode)
이 시리즈의 마지막 장면은 단순하다. 회의 녹음을 넣자 화면에 한국어 문장이 실시간으로 풀려나온다. 그것도 녹음을 장비 밖으로 한 번도 내보내지 않고, Jetson 보드 안에서 끝낸다.
여기까지 오려고 우리는 가벼운 Yocto OS를 만들고(①②), GPU를 컨테이너로 되붙이고(③), 무인 업데이트를 붙였다(④). 이번 마지막 편은 그 위에 실제 AI 일감을 얹은 기록이다. 가벼운 OS가 정말 실제 AI를 감당하는지, 수치로 보인다.
받아쓰기 엔진은 우리가 만든 것이 아니다. 오픈소스 whisper.cpp를 썼다. 우리가 한 일은 그것을 이 OS 위에서 CDI GPU로 도는 컨테이너로 묶고, 실제 한국어 회의 녹음으로 속도와 정확도를 잰 것이다. 이번 입력은 실시간 마이크가 아니라 녹음 파일이다. 실시간 마이크 처리는 다음 과제로 둔다.
왜 온디바이스인가
회의 음성에는 민감한 내용이 담긴다. 클라우드로 보내면 편하지만, 녹음이 장비 밖으로 나가는 순간 통제권도 함께 나간다. 그래서 우리는 받아쓰기를 장비 안에서 끝냈다. 네트워크가 없어도 동작하고, 음성 데이터가 밖으로 나가지 않는다. 이것이 Edge에서 AI를 돌리는 이유다. 레퍼런스 일감으로 회의록을 고른 것도 이 서사와 맞아서다.
실시간보다 몇 배 빠르게
핵심 지표는 RTF다. 오디오 길이를 처리 시간으로 나눈 값으로, 1배면 실시간, 그보다 크면 실시간보다 빠르다는 뜻이다. medium 모델은 32초짜리 한국어 녹음을 약 7초에 처리했다. 실시간의 약 4.5~5배다. 무인 회의록 용도로는 넉넉한 여유다.
GPU가 실제로 쓰였는지도 로그로 확인했다. 컨테이너 안에서 whisper.cpp가 Orin GPU(compute capability 8.7)를 찾아 CUDA 백엔드로 추론했다. ③편에서 붙인 CDI GPU가 실제 AI 일감에 그대로 쓰인 것이다.
빠른 것보다 맞는 것 — 모델 선택
더 작은 small 모델은 medium보다 빨랐다(약 6.6배). 하지만 정확도에서 갈렸다. small은 소리가 비슷한 단어를 자주 헷갈렸다. “회의”를 “해외”로, “일정 공유”를 “1천 공유”로 옮겼다. medium은 이 혼동을 없앴다. 대본과 대조하니 틀린 단어가 없었고, 차이는 띄어쓰기와 숫자 표기 방식뿐이었다.
회의록처럼 정확도가 중요한 일에는 빠른 모델이 아니라 맞는 모델이 답이다. 그래서 medium을 택했다.
전원부터 첫 받아쓰기까지
부팅과 묶어서도 재봤다. 전원을 넣고 첫 받아쓰기 결과가 나오기까지 약 32.7초였다. 앞선 편에서 다룬 로그인까지의 시간(약 24.9초)에, 컨테이너를 띄우고 모델을 GPU에 올리는 약 8초가 더해진 값이다.
이 숫자를 줄여 부르지 않고 그대로 밝힌다. 컨테이너를 미리 띄워 두고 모델을 먼저 올려 두면 더 빨라지지만, 그 최적화는 제품화 단계의 몫으로 남긴다.
정리 — 개발기 1막을 닫으며
가벼운 OS를 만들고(①②), GPU를 컨테이너로 붙이고(③), 무인으로 업데이트하고(④), 그 위에서 실제 AI 일감을 돌렸다(⑤). 다섯 편에 걸친 이 개발기의 뼈대는 여기서 닫힌다.
정리하면 이렇다. 우리는 스톡 이미지를 그대로 싣는 대신, 필요한 것만 남긴 OS 위에 컨테이너로 GPU와 AI를 얹는 길을 택했다. 그리고 그 길이 실제로 동작함을 회의록 받아쓰기로 확인했다.
아래는 이 OS에서 STT가 회의 녹음을 실시간으로 받아쓰는 데모다.
참고 자료
- ggml-org, whisper.cpp
- NVIDIA, NGC l4t-jetpack 컨테이너
- NVIDIA, Container Toolkit — CDI GPU 주입
- 자체 실측(2026년 7월): whisper.cpp 전사 로그 · RTF·정확도 측정 · 부팅 결합 측정 · 데모 영상
이 글은 바이코드가 Jetson 기반 양산용 Edge OS를 만드는 과정을 공개한 개발기 시리즈의 마지막(다섯 번째) 편입니다.