웹어셈블리 샌드박스에서 AI 모델을 구동하려는 개발자가 GPU로 데이터를 전송할 때마다 발생하는 메모리 복제 비용과 지연 시간에 가로막힌다. 가상 머신과 하드웨어 가속기 사이의 데이터 전송은 늘 병목 구간이었으며, 이는 모델의 응답 속도와 메모리 효율을 직접적으로 떨어뜨리는 원인이 된다.

Apple Silicon UMA와 Wasmtime의 메모리 공유 구조

Apple Silicon(애플의 자체 설계 칩셋)의 Unified Memory Architecture(CPU와 GPU가 메모리를 공유하는 구조)를 활용해 데이터 복사가 없는 제로카피 추론 방식이 구현되었다. 이 구조는 세 가지 기술적 연결 고리를 통해 작동한다. 첫째, mmap(파일이나 장치를 메모리에 매핑하는 시스템 호출)을 사용하여 MAP_ANON | MAP_PRIVATE 플래그로 16KB 정렬된 메모리 주소를 확보한다. 둘째, Metal(애플의 GPU 가속 프레임워크)의 `MTLDevice.makeBuffer(bytesNoCopy:length:)` 함수를 사용하여 해당 포인터를 복사 없이 GPU 버퍼로 래핑한다. 셋째, Wasmtime(웹어셈블리를 실행하는 런타임)의 MemoryCreator(메모리 할당 방식을 정의하는 인터페이스)를 구현해 런타임이 내부적으로 mmap을 호출하는 대신 미리 확보한 메모리 영역을 사용하게 한다.

검증을 위해 128x128 행렬 곱셈인 GEMM(일반 행렬 곱셈 연산) 셰이더를 실행했다. 16,384개의 요소 전체에서 오류가 없음을 확인했으며, 포인터 동일성 검사 결과 MTLBuffer.contents() 포인터가 원래의 mmap 포인터와 일치했다. 메모리 오버헤드 측정 결과, 명시적 복사 경로에서는 RSS(실제 물리 메모리 사용량)가 16.78MB 증가했으나 제로카피 경로에서는 0.03MB 증가에 그쳤다. 최종적으로 2021년형 M1 맥북 프로에서 4비트 양자화된 Llama 3.2 1B(695MB) 모델을 MLX(애플 실리콘 최적화 머신러닝 프레임워크)와 연결해 추론을 수행했다.

샌드박스 격리와 GPU 가속의 임피던스 미스매치 해결

기존의 이산형 GPU 환경에서는 Wasm 샌드박스에서 호스트 메모리로 데이터를 복사한 뒤, 다시 PCIe(컴퓨터 내부 부품을 연결하는 고속 인터페이스 표준) 버스를 통해 GPU 메모리로 옮겨야 했다. 이 과정에서 두 번의 복사와 두 번의 지연 시간이 발생하며, 격리된 VM과 하드웨어 가속기 사이의 구조적 불일치가 나타난다. 반면 Apple Silicon은 물리적 버스가 없는 구조이기에 CPU가 읽는 포인터를 GPU가 그대로 읽을 수 있다.

주목할 점은 단순한 연산 속도보다 메모리 효율의 극대화다. 트랜스포머 모델의 KV Cache(이전 대화 맥락을 저장하는 메모리 공간)는 대화가 길어질수록 수백 메가바이트까지 늘어난다. 복사 방식은 메모리 점유율을 두 배로 높여 가용 자원을 빠르게 소모시키지만, 제로카피 방식은 이를 완전히 제거한다. 이는 동일한 메모리 용량에서 구동 가능한 AI 에이전트의 수를 두 배로 늘릴 수 있음을 의미한다. 또한 Wasm-to-GPU 디스패치(명령 전달) 시 발생하는 호스트 함수 경계 비용은 실제 추론 비용에 비해 측정 불가능한 수준으로 낮아졌다.

메모리 복사라는 물리적 제약을 제거한 샌드박스는 이제 단순한 격리 공간이 아니라 고성능 연산의 제어 평면으로 진화했다.