TL;DR
체크포인트 변환기에서 수학적으로 같은 RMSNorm 파라미터화를 사용하더라도 BF16 반올림이 발생하는 위치에 따라 원래 가중치가 손실될 수 있습니다. Qwen 3.5 0.8B의 3.359375와 3.390625는 FP32에서 1을 더하면 4.359375와 4.390625로 구분되지만, BF16에서 직접 더하면 모두 4.375가 됩니다. 이후 1을 빼도 두 값이 모두 3.375로 돌아가므로 역변환으로 원본을 복구할 수 없습니다. 게시자는 산술 변환 뒤 저정밀 형식으로 저장하는 경로를 작은 재현 테스트와 역변환 검증으로 점검해야 한다고 봅니다.
실용적 조언
- 변환기가 가중치에 산술 연산을 적용한다면 입력 정밀도, 연산 정밀도, 출력 저장 정밀도를 각각 확인해야 합니다. BF16 offset에 1을 더하는 경우처럼 FP32 승격 후 계산하는 경로와 BF16에서 바로 계산하는 경로를 분리해 비교하면 값의 병합 여부를 확인할 수 있습니다. 특히 변환 결과를 다시 BF16으로 저장한다면 서로 다른 입력이 같은 표현으로 수렴하는지 작은 테스트 벡터로 먼저 검증하는 편이 안전합니다.
- 파라미터화를 바꾸는 변환에서는 정방향 변환만 통과시키지 말고 역변환까지 수행해 원래 값과 비교해야 합니다. 이 사례처럼 3.359375와 3.390625가 변환 뒤 모두 3.375로 돌아오면 변환은 수학식 수준에서는 맞더라도 체크포인트 정보는 손실된 상태입니다. 프레임워크 간 변환기를 배포하기 전에는 대표 가중치에 대한 최대 오차와 중복 표현 발생 여부를 자동 검사하는 절차가 필요합니다.
섹션별 상세
용어 해설
- bfloat16(BF16)
- — BF16은 부동소수점 수를 16비트로 저장하는 저정밀 형식입니다. FP32보다 지수부 범위는 유지하지만 가수부가 짧아, 연산이나 변환 과정에서 서로 다른 값이 같은 표현으로 반올림될 수 있습니다.
- RMS 정규화(RMSNorm)
- — RMSNorm은 입력 벡터의 제곱 평균 제곱근으로 값을 정규화한 뒤 학습 가능한 스케일을 곱하는 정규화 방식입니다. 이 글에서는 스케일을 offset과 1의 합으로 표현하는 두 저장 방식이 문제가 됩니다.
- 단정밀도 부동소수점(FP32)
- — FP32는 32비트 부동소수점 형식으로, BF16보다 가수부가 길어 더 세밀한 값을 유지합니다. BF16 값을 FP32로 승격한 뒤 1을 더하면 이 사례의 두 결과가 서로 다른 값으로 남습니다.
- 반올림 경계(rounding boundary)
- — 반올림 경계는 연산 결과를 특정 정밀도의 표현으로 저장하는 시점에 값이 인접한 표현 중 하나로 수렴하는 지점입니다. 같은 수학식이라도 연산 전후 어느 단계에서 BF16으로 반올림하는지에 따라 정보 손실 여부가 달라집니다.
- 체크포인트 변환기(checkpoint converter)
- — 체크포인트 변환기는 모델 가중치를 프레임워크나 저장 형식에 맞게 이름 변경, 형태 변환, 순열 또는 산술 변환하는 프로그램입니다. 산술 결과를 저정밀 형식으로 저장하면 역변환으로 원래 값을 복구하지 못할 수 있습니다.
- 동형성(isomorphism)
- — 동형성은 두 표현 사이에 구조를 보존하는 변환과 역변환이 존재하는 관계입니다. 이 글은 수학적으로 역변환이 가능한 파라미터화라도 유한 정밀도 저장이 끼어들면 실제 값 수준의 복구 가능성이 사라질 수 있음을 보여줍니다.
코드 예제
import torch
x = torch.tensor([3.359375, 3.390625], dtype=torch.bfloat16,)
print(x.float() + 1)
# tensor([4.3594, 4.3906])
print(x + 1)
# tensor([4.3750, 4.3750], dtype=torch.bfloat16)동일한 BF16 입력에 FP32 승격 후 덧셈을 적용하는 경우와 BF16 상태에서 직접 덧셈을 적용하는 경우의 결과를 비교합니다.
언급된 도구
BF16 텐서에서 FP32 승격 후 덧셈과 BF16 직접 덧셈의 결과를 재현하는 데 사용된 Python 라이브러리입니다.
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.
