원문 캡처 · getopposable.com
원문 캡처 · getopposable.com

Opposable는 안드로이드 화면을 읽고 앱을 터치·입력하는 기능을 제공한다. 클라우드 모델이 연결되지 않아도 20억 매개변수 화면 모델을 휴대전화에서 실행해 조작할 수 있지만, 현재 온디바이스 NPU 지원은 스냅드래곤 기기에 한정된다.

휴대전화에서 화면을 처리하는 방식

Opposable는 접근성 서비스를 통해 화면을 읽고 다른 앱을 조작한다. 클로드, ChatGPT, Codex를 컴퓨터에서 연결해 사용할 수 있으며, 연결된 모델이 없을 때는 Alibaba Mobile-Agent 팀의 GUI-Owl 1.5 2B를 llama.cpp에서 4비트로 실행한다. 언어 모델은 1.05GB, 비전 인코더는 445MB이며, 두 모델은 한 번 불러온 뒤 단계 사이에도 메모리에 유지된다.

알람 설정이나 문자 전송, 와이파이 켜기 등 약 40가지 흔한 작업은 모델을 쓰지 않고 고정 코드로 처리한다. 대형 에이전트가 앞서 찾아낸 작업 절차도 화면의 텍스트를 바탕으로 다시 실행할 수 있다.

제작자 측은 36개 화면을 평가한 테스트에서 M2 CPU의 한 단계 처리 시간을 최적화 전 10.6초에서 7.3초로 줄였고, 정확도는 36개 중 27개로 같았다고 밝혔다. 화면에서 상태 표시줄·내비게이션 바·키보드를 잘라내고, 주변에 콘텐츠가 없는 배경 패치 토큰을 제거해 토큰 수를 25~40% 줄였다. 모델이 의도를 문장으로 말한 뒤 생성한 문장이 접근성 트리의 요소 하나와 정확히 일치하면 좌표 생성을 기다리지 않고 해당 요소를 누른다.

갤럭시 S25에서 비전 인코더 실행

제작자는 GUI-Owl의 비전 인코더만 ONNX로 내보내 Qualcomm AI Hub를 통해 갤럭시 S25의 스냅드래곤 8 엘리트 NPU용으로 컴파일했다. 416×960 픽셀 입력에서 fp16 인코더는 873개 연산을 모두 NPU에서 수행해 236밀리초가 걸렸다. 제작자 측은 M2 CPU에서 측정한 3.9초보다 약 16배 빠르다고 설명했다.

8비트 가중치와 16비트 활성값 설정은 213밀리초로 더 빨랐지만 기준 출력과의 유사도가 낮아졌다. 앱은 화면의 작은 세부 사항에 따라 탭 위치가 달라질 수 있다는 점을 고려해 fp16을 사용한다. NPU의 첫 로딩은 그래프 준비 때문에 설치당 한 번 72초가 걸리고, 이후 로딩은 0.39초다. 앱은 시작할 때 NPU, LiteRT를 통한 GPU, CPU 순으로 시도하며, CPU 인코더와의 자체 테스트에서 코사인 유사도 0.97 이상을 기록하고 CPU보다 빨라야 해당 인코더를 사용한다. 640토큰 입력은 NPU 컴파일에 실패해 필요한 단계는 CPU에서 처리한다.

정확도와 지원 범위

튜닝에 사용하지 않은 8개 작업을 안드로이드 에뮬레이터에서 각각 두 차례 시험했을 때, 전체 작업을 한꺼번에 맡긴 방식은 두 차례에 각각 4회와 3회 성공했다. 작업을 하위 목표로 나눠 한 번에 하나씩 수행하고, 다음 목표로 넘어가기 전에 접근성 트리로 성공 여부를 확인한 방식은 두 차례 모두 6회 성공했다.

현재 NPU 빌드는 스냅드래곤용만 제공된다. 픽셀은 텐서용 별도 컴파일이 필요하고, 미디어텍과 엑시노스도 각각 별도 작업이 필요해 해당 기기는 GPU나 CPU를 사용한다. 제작자는 처음 보는 앱에서는 모델이 클라우드 모델보다 훨씬 약하며, 연결되어 있으면 해당 작업을 클로드, ChatGPT 또는 Codex에 넘긴다고 밝혔다.

앱은 getopposable.com에서 무료로 제공된다. 화면 모델은 설정에서 1.5GB 파일로 내려받으며, 같은 화면에서 선택된 인코더와 화면 인코딩 시간을 확인할 수 있다. 앱 받기.