본문으로 건너뛰기

[Ray Data/LLM] 폐기된 TRANSFORMERS_CACHE를 HF_HUB_CACHE로 교체하고 AutoConfig 실패를 비치명적으로 처리

PR 링크: ray-project/ray#60854 상태: Merged | 변경: +28 / -9

들어가며

Ray Data LLM 모듈은 모델 경로를 확인하기 위해 transformers.utils.hub.TRANSFORMERS_CACHE를 사용하고, 텔레메트리를 위해 transformers.AutoConfig.from_pretrained()를 호출합니다. transformers 5.0.0부터 TRANSFORMERS_CACHE가 폐기되었고, 사용자가 Pin을 무시하고 최신 버전을 사용하면 ImportError가 발생합니다. 또한 일부 모델은 HuggingFace의 AutoConfig으로 로드할 수 없는데, 이것이 전체 파이프라인을 중단시켰습니다.

핵심 코드 분석

Before: 폐기된 import와 치명적 AutoConfig 실패

# cloud_utils.py
from transformers.utils.hub import TRANSFORMERS_CACHE  # transformers 5.0+에서 실패

return Path(
    TRANSFORMERS_CACHE, f"models--{self.model_id.replace('/', '--')}"
).expanduser()

# vllm_engine_proc.py
hf_config = transformers.AutoConfig.from_pretrained(
    model_path,
    trust_remote_code=config.engine_kwargs.get("trust_remote_code", False),
)  # 실패 시 전체 프로세서 생성 중단

After: HF_HUB_CACHE 사용과 graceful fallback

# cloud_utils.py
from huggingface_hub.constants import HF_HUB_CACHE  # 안정적인 API

return Path(
    HF_HUB_CACHE, f"models--{self.model_id.replace('/', '--')}"
).expanduser()

# vllm_engine_proc.py
try:
    hf_config = transformers.AutoConfig.from_pretrained(
        model_path,
        trust_remote_code=config.engine_kwargs.get("trust_remote_code", False),
    )
except Exception:
    logger.warning(
        f"Failed to retrieve HuggingFace config for {config.model_source}"
    )
    hf_config = None  # 텔레메트리용이므로 비치명적 처리

architectures = getattr(hf_config, "architectures", [])
architecture = architectures[0] if architectures else DEFAULT_MODEL_ARCHITECTURE

왜 이게 좋은가

  1. transformers 5.0+ 호환성: huggingface_hub.constants.HF_HUB_CACHE는 버전에 관계없이 안정적으로 사용 가능한 API이다.
  2. 비치명적 fallback: AutoConfig 로드 실패는 텔레메트리 용도일 뿐이므로, DEFAULT_MODEL_ARCHITECTURE로 대체하여 실제 모델 로딩에 영향을 주지 않는다.
  3. vLLM과의 일관성: vLLM도 TRANSFORMERS_CACHE에 의존하지 않으므로, Ray Data LLM이 vLLM과 동일한 호환성 수준을 확보한다.

참고 자료

댓글

관련 포스트

PR Analysis 의 다른글