에이전트와 개발

llama.cpp, LFM2-VL 이미지 리사이즈를 torchvision과 일치시키고 AMD HIP 빌드 오류 수정

llama.cpp가 10월 24일 b11851~b11853 빌드에서 LFM2 계열 비전 모델의 이미지 리사이즈 결과를 torchvision과 맞추고, AMD HIP 빌드 실패를 막는 대체 경로를 넣었다.

루카스 ·

llama.cpp 프로젝트가 2026년 10월 24일 b11851 빌드에서 LFM2 계열 비전 모델의 이미지 리사이즈 방식을 torchvision과 같은 결과가 나오도록 고쳤다. 같은 날 나온 b11853에는 AMD HIP 빌드에서 특정 내장 함수를 쓸 수 없을 때 쓰는 바이트 치환 대체 경로가 들어갔다.1,2

검은색 외관의 AMD Radeon RX 6000 시리즈 그래픽카드 사진. 이 기사의 AMD HIP 빌드 문제와 관련된 AMD GPU 기기다.
검은색 AMD Radeon RX 6000 시리즈 그래픽카드Nzest1981 / Wikimedia Commons · CC BY-SA 4.0 · 원본 · 크기 조정

변경은 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

댓글

기사에 대한 의견이나 틀린 내용 제보를 남겨 주세요.

댓글을 불러오고 있습니다.