LM Evaluation Harness 커스텀 모델 — LM 서브클래스 작성법
LM Evaluation Harness 커스텀 모델 — LM 서브클래스 작성법
라이브러리를 pypi로 설치하고 lm_eval.evaluator.evaluate()로 기존 모델을 평가하는 사용자라면, 평가 하네스가 모델과 어떻게 인터페이스하는지 정의하는 lm_eval.api.model.LM 서브클래스 래퍼를 구현해야 해요.
출처: https://github.com/EleutherAI/lm-evaluation-harness/blob/main/docs/model_guide.md
설정
저장소를 fork·clone하고 모델 이름으로 브랜치를 만든 뒤 개발 의존성을 설치합니다. 새 모델 파일을 만들 때는 패키지 이름과 겹치지 않게 파일명을 지으세요. 예를 들어 anthropic.py는 pypi의 anthropic 패키지 이름과 겹쳐 안 되고, anthropic_llms.py는 문제없어요.
git clone https://github.com/<YOUR-USERNAME>/lm-evaluation-harness.git
cd lm-evaluation-harness
git checkout -b <model-type>
pip install -e ".[dev]"
touch lm_eval/models/<my_model_filename>.py
인터페이스 — 세 가지 요청 유형
모든 모델은 lm_eval.api.model.LM을 상속해야 하고, 하네스가 응답을 뽑아내는 공통 인터페이스를 구현해요.
class MyCustomLM(LM):
#...
def loglikelihood(self, requests: list[Instance]) -> list[tuple[float, bool]]:
#...
def loglikelihood_rolling(self, requests: list[Instance]) -> list[tuple[float, bool]]:
#...
def generate_until(self, requests: list[Instance]) -> list[str]:
#...
세 가지 요청 유형은 자동회귀(autoregressive) LM과의 서로 다른 상호작용을 나타내며, 각각 Instance.request_type이 메서드 이름과 일치해요.
generate_until— 입력 문자열과 생성 파라미터 딕셔너리(Instance.args: Tuple[str, dict])를 받아, 생성을 거쳐 출력 텍스트를 반환. 예:{"until": ["\n\n", "."], "max_gen_toks": 128}처럼 최대 출력 길이나 정지 문자열로 생성을 통제.loglikelihood— 입력 문자열과 타깃 문자열을 받아 타깃에 대한 로그우도를 계산.loglikelihood_rolling— 긴 텍스트를 슬라이딩 윈도로 잘라 누적 로그우도를 계산 (perplexity 측정용).
각 메서드는 list[Instance]를 입력으로 받고, 일치하는 request_type을 가진 요청만 들어옵니다. 이 인터페이스를 구현해 라이브러리에 추가하면, simple_evaluate()나 evaluate()에서 그 모델을 곧바로 평가할 수 있어요.
더 알아보기
- Python API는 Python API 참고
- CLI 사용법은 Quickstart 참고