방법론
이 사이트의 측정값이 어떻게 나오는지, 그리고 그 값으로 어디까지 말할 수 있는지 적었습니다.
한 번에 한 가지 변수
실험은 한 가지만 바꾸고 나머지는 모두 고정합니다. 한 실험 안에서는 시드, 프롬프트, 입력 이미지, 해상도, 프레임 수, 스텝 수를 실행마다 같게 두고, 기록에 그 값을 모두 적습니다. 두 가지가 동시에 바뀌면 결과가 아무것도 설명하지 못하므로, 비교 결과로 게시하지 않습니다.
기록하는 항목
모든 실험 기록에는 최소한 다음 항목이 들어갑니다.
- 플랫폼, GPU 또는 SoC, VRAM 또는 통합 메모리 용량.
- 운영체제, 드라이버 버전, 런타임 버전, Python과 PyTorch 버전.
- 양자화를 포함한 모델 이름, 그리고 함께 불러온 LoRA.
- 시드를 포함한 통제 조건.
- 실행마다 한 항목씩, 그 결과와 최대 메모리, 소요 시간.
- 최소 한 개의 산출물. 출력 파일이나 화면 캡처, 로그 중 하나.
이 항목이 빠진 기록은 스키마 검증에서 걸러져 사이트에 올라가지 않습니다. 전체 스키마와 기록 원본은 공개 저장소에 있습니다.
실행 결과
실행은 다섯 가지 상태 중 하나로 끝나고, 다섯 가지 모두 기록합니다.
- 성공
- 실행이 끝났고 쓸 만한 결과물이 나왔습니다.
- 메모리 부족
- 실행이 메모리 한계에 부딪혔습니다. 사람들이 검색하는 것이 그 문자열이므로, 오류 메시지 원문을 그대로 기록에 남깁니다.
- 오류
- 메모리가 아닌 다른 이유로 실행이 실패했습니다. 오류 메시지를 기록에 남깁니다.
- 품질 저하
- 실행은 끝났지만 결과물이 문제 삼을 만큼 나빴습니다. 품질 저하는 판단이 들어가는 항목이므로, 결과물의 무엇이 잘못됐는지 기록에 적습니다.
- 미확인
- 실행은 했지만 어떻게 됐는지 적어 두지 않았습니다. 「기록」 등급의 자료에서만 쓸 수 있는 상태이며, 나중에 결과를 짐작해서 적는 대신 이렇게 남깁니다.
메모리와 시간 측정
최대 메모리는 실행 중에 보고된 최댓값이며, 안정 상태의 값이 아닙니다. 그 설정이 메모리에 들어가는지를 결정하는 값이 최댓값이기 때문입니다. 생성 시간은 큐에 들어간 시점부터 결과 파일이 쓰일 때까지 실행 전체를 재고, 콜드 스타트에서는 모델 로딩 시간도 포함합니다. 모델이 이미 메모리에 올라간 상태에서 잰 값이면 기록에 그렇게 적습니다. 12GB 카드에서는 그 차이가 크기 때문입니다.
언어 모델의 토큰 속도는 컨텍스트 길이를 명시한 상태에서 측정하고, 데이터베이스의 모든 행에 컨텍스트 길이를 함께 적습니다. 컨텍스트 길이 없이 적힌 토큰 속도는 무엇과도 비교할 수 없습니다.
평균이 아닌 단일 실행
여기 있는 기록은 대부분 한 번 실행한 결과입니다. 소비자용 하드웨어에서 영상 생성을 열 번 반복하면 몇 시간이 들지만 결론은 거의 달라지지 않습니다. 결론은 대개 4퍼센트 더 빠른지가 아니라 메모리에 들어가는지에 대한 것이기 때문입니다. 실행마다 생기는 편차가 중요한 경우에는 기록에 여러 실행을 담고 글에도 그렇게 적습니다. 여기 있는 수치는 통계적으로 평균 낸 벤치마크가 아니므로, 그렇게 제시하지 않습니다.
이 수치로 알 수 없는 것
측정값 하나는 장비 한 대, 드라이버 버전 하나, 런타임 빌드 하나를 설명합니다. 드라이버가 달라지면 최대 메모리가 성공을 메모리 부족 오류로 바꿀 만큼 움직이기도 합니다. 부하가 이어질 때의 발열 거동은 데스크톱 그래픽카드와 노트북 SoC가 다르고, 노트북에서 차가운 상태로 잰 값은 그날 저녁 열 번째 실행을 설명하지 못합니다.
모든 글에는 다른 구성에서 무엇이 달라지는지 적는 절이 있습니다. 그 절을 정직하게 쓸 수 없다면, 그 측정은 게시하기에 범위가 너무 좁은 것입니다.
재검증
기록에는 검증 날짜가 있고, 90일이 지나면 「오래됨」으로 표시합니다. 재검증은 현재 버전으로 실험을 다시 돌려 그 결과를 새 실행으로 기록하고, 이전 실행은 그대로 두는 것입니다. 기록의 이력도 기록의 일부이므로, 최신처럼 보이게 하려고 기존 행을 덮어쓰지 않습니다.