llama.cpp 프로젝트가 2026년 10월 24일 b11851 빌드에서 LFM2 계열 비전 모델의 이미지 리사이즈 방식을 torchvision과 같은 결과가 나오도록 고쳤다. 같은 날 나온 b11853에는 AMD HIP 빌드에서 특정 내장 함수를 쓸 수 없을 때 쓰는 바이트 치환 대체 경로가 들어갔다.1,2
변경은 llama.cpp 공식 GitHub 릴리스로 배포됐다. 이미지 리사이즈 수정은 LFM2와 d1-omni 모델에 적용되고 다른 모델은 기존 Pillow 알고리즘을 유지한다.1,2
Lfm2VlImageProcessor와 d1-omni의 vision.py는 uint8 이미지를 torchvision(antialias=True)으로 줄인다. torchvision은 Pillow와 같은 알고리즘이지만, 가중치를 int16으로 두고 가장 큰 가중치가 허용하는 만큼의 소수 비트를 쓴다. Pillow는 22비트를 쓴다. 기존 Pillow 이식 코드는 d1-omni와 LFM2.5-VL 크롭 값의 약 1%에서 1~2단계 어긋났다.
새로 추가된 RESIZE_ALGO_BILINEAR_TORCH는 Pillow 이식 코드의 가중치를 해당 정밀도로 반올림한 뒤 22비트로 되돌린다. 같은 패스를 쓰는 torchvision 출력과 같은 값이 나오며, LFM2와 d1-omni에서 'bilinear'가 이 방식으로 연결된다.
Lfm2VlImageProcessor는 바이큐빅 체크포인트(d1-3B, LFM2-VL)에서도 torchvision으로 리사이즈한다. 그래서 LFM2에서는 'bicubic'이 RESIZE_ALGO_BICUBIC_TORCH로 연결된다. 이 방식은 Pillow 바이큐빅 필터(a = -0.5)에 torchvision의 int16 가중치를 쓴다. 기존 이식 코드는 d1-3B 크롭 값의 약 0.25%에서 1~2단계 어긋났다. 이번 변경에는 비트필드 사용과 hparams 설정 함수 추가도 포함됐다.1
b11853은 HIP에서 builtin_amdgcn_perm을 쓸 수 없을 때를 위한 바이트 치환 대체 경로를 넣었다. amdgcnspirv는 builtin_amdgcn_is_invocable로 보호하지 않은 타깃 전용 내장 함수를 거부해, 수정 전에는 HIP 파일 145개 중 66개가 빌드에 실패했다.
perm 호출을 감싸는 도우미 함수는 타깃이 v_perm_b32를 지원하면 이를 그대로 쓰고, 지원하지 않으면 이식 가능한 바이트 선택으로 처리한다. 이 도우미는 vendors/hip.h로 옮겨졌다.2
이번 변경으로 LFM2와 d1-omni의 리사이즈가 같은 패스를 쓰는 torchvision 출력과 같은 값을 내도록 고쳐졌다. AMD GPU용 HIP 빌드를 직접 컴파일하는 경우에는 __builtin_amdgcn_perm을 쓸 수 없는 타깃을 위한 대체 경로가 b11853에 들어갔다.1,2
출처
- ggml-org/llama.cpp b11851 github.com
- ggml-org/llama.cpp b11853 github.com