Metal 호환성 레이어를 통해 macOS VM 내

가상머신에서 프롬프트 처리 속도는 11.08배, 토큰 생성 속도는 16.36배나 빨라졌다. Lume(루메, macOS 가상화 도구)이 제공하는 호환성 레이어가 llama.cpp(라마 씨피피, LLM 추론 엔진)가 가상 환경에서도 최신 연산 방식을 선택하도록 유도했기 때문이다. 기존에는 가상 머신 환경의 제약으로 인해 성능이 낮은 구형 커널을 사용해야 했지만, 이제는 최적의 경로를 찾아 빠르게 추론할 수 있다.

Apple의 Virtualization.framework(버추얼라이제이션 프레임워크, 가상 머신 구동 도구)를 사용하는 macOS 게스트는 기본적으로 사용할 수 있는 Metal(메탈, 애플 GPU 가속 API) 성능 프로필이 제한되어 있다. Lume은 특정 게스트 프로세스가 하드웨어 능력을 확인할 때 응답 값을 수정하는 작은 호환성 레이어를 추가했다. 소프트웨어가 GPU에게 어떤 기능을 쓸 수 있느냐고 물으면, 레이어가 중간에서 최신 기능을 쓸 수 있다고 답을 바꿔주는 방식이다. 덕분에 llama.cpp는 가상 환경임에도 불구하고 최신 Metal 커널(커널, GPU가 계산을 수행하는 핵심 코드)을 선택해 연산할 수 있게 됐다.

실제 성능 검증은 48코어 GPU를 탑재한 M1 Ultra 하드웨어에서 수행됐다. 호스트 macOS 26.6.1 환경에 Lume 0.5.1을 설치하고, 게스트 운영체제로 macOS 26.5.2 버전의 Tahoe Cua 이미지(8 vCPU, 16 GiB)를 사용해 벤치마크를 측정했다. 가상 머신이라는 제약 조건 속에서도 하드웨어의 잠재력을 최대한 끌어올린 구성이다.

Gemma 4 12B 모델에서도 프롬프트 처리와 토큰 생성

프롬프트 처리는 7.20배, 토큰 생성은 14.54배 빨라졌다. Google의 Gemma 4 12B 모델에 호환성 레이어를 적용한 결과다. 베어메탈(가상화 없이 하드웨어를 직접 사용하는 환경)과 비교해 프롬프트 속도는 99.59%, 생성 속도는 94.82%까지 따라잡았다. 가상 환경의 성능 제약을 거의 완전히 제거했다.

애플리케이션과 API 사이에 삽입된 Metal capability shim(응답을 가로채 값을 바꾸는 작은 장치)이 이 과정을 주도한다. 이 장치가 Metal 기능 쿼리를 가로채 Apple-family 버전과 threadgroup-memory(GPU가 한 번에 처리하는 데이터 묶음의 메모리 제한 값) 수치를 조작한다. llama.cpp(로컬 환경에서 LLM을 구동하는 도구)가 하드웨어를 최신 사양으로 인식하게 만드는 방식이다.

속여낸 정보 덕분에 llama.cpp는 최신 GPU 경로를 선택한다. SIMD-group reduction(여러 데이터를 동시에 계산해 합계를 내는 방식)과 매트릭스 연산, bfloat16(AI 연산 효율을 높인 숫자 표기법) 경로가 활성화된다. 소프트웨어 설정을 통해 하드웨어의 연산 효율을 극대화했다.

환경에서 TinyLlama 1.1B 모델의 프롬프트 처리

11.08배 빠른 프롬프트 처리 속도는 M1 Ultra 환경에서 llama.cpp(LLM 추론 엔진)를 통해 TinyLlama 1.1B 모델을 구동했을 때 나타난 결과다. 기존 가상머신(VM) 대비 토큰 생성 속도는 16.36배까지 빨라졌다. 특히 프롬프트 처리 속도는 물리 서버인 베어메탈 결과의 98% 수준에 도달했다. 가상 환경의 성능 제약을 사실상 지운 셈이다.

Apple의 Virtualization.framework(가상화 프레임워크) 그래픽 경로를 그대로 쓰면서 보고되는 기능 값만 수정하는 파라가상화(하드웨어 기능을 소프트웨어로 흉내 내어 전달하는 방식)를 썼다. QEMU나 KVM의 VFIO(물리 장치를 가상머신에 직접 연결하는 기술)처럼 PCI 장치를 VM에 직접 할당하는 방식과는 다르다. 호스트의 Apple GPU에서 그대로 실행되도록 경로만 최적화했다.

DYLD_INSERT_LIBRARIES 환경 변수를 이용해 dylib(동적 라이브러리)를 주입하고 metal-capability-shim 소스 코드를 설정하면 가상머신에서도 베어메탈 대비 프롬프트 처리 속도를 최대 99.59%까지 회복할 수 있다. 다만 MLX-LM처럼 이미 최적화된 라이브러리에서는 성능 향상이 없으며 macOS 버전에 따라 동작 여부가 달라진다.