피드로 돌아가기
Resurrecting Kepler: Getting Modern LLMs Running on a GTX 770 (Kernel 7.x)
Dev.toDev.to
AI/ML

GTX 770 Kepler GPU의 5바이트 바이너리 패치로 LLM 추론 구현

Resurrecting Kepler: Getting Modern LLMs Running on a GTX 770 (Kernel 7.x)

skyne2026년 6월 27일5advanced

Context

NVIDIA의 지원이 중단된 Kepler 아키텍처(sm_30) GPU를 최신 Linux 커널 7.x 환경에서 구동하려는 시도임. 최신 커널 API 변경으로 인한 드라이버 컴파일 실패와 cuInit 호출 시 발생하는 Error 802 시스템 초기화 오류가 핵심 병목 지점임.

Technical Solution

  • 커뮤니티 패치셋을 활용해 screen_infosysfb_primary_display.screen으로 변경하는 등 커널 6.15 이상 API 호환성 확보
  • gdb 디스어셈블리를 통해 libcuda.so 내 RM 응답 핸들러가 상태 코드 2(NV_ERR_BUFFER_TOO_SMALL)를 치명적 오류로 처리하는 지점 식별
  • mov $0x322, %eax 명령어를 xor %eax, %eax로 수정하는 5바이트 바이너리 패치를 통해 강제로 성공 응답(0) 반환 유도
  • CUDA 11 이상에서 도입된 cg::this_grid()cg::this_thread_block()으로 변경하여 CUDA 10.2 런타임 환경에 맞게 소스 코드 수정
  • sm_30 하드웨어 제약으로 인해 CUDA Graph 캡처 기능을 비활성화하는 -DGGML_CUDA_GRAPHS=OFF 플래그 적용
  • Clang++ 컴파일러를 브릿지로 활용하여 레거시 CUDA 10.2 헤더와 최신 시스템 라이브러리 간의 링크 충돌 해결

1. 레거시 하드웨어 구동 시 커널 API 변경 사항을 반영한 커뮤니티 패치셋 검토

2. 드라이버-펌웨어 간 버퍼 사이즈 미스매치로 인한 초기화 오류 발생 시 바이너리 패치 가능성 확인

3. 하드웨어 아키텍처 버전(sm_xx)에 따라 지원하지 않는 최신 CUDA 기능(예: CUDA Graph) 식별 및 비활성화

4. VRAM 용량 제한 시 모델 양자화 수준(Q4 $\rightarrow$ Q3)을 조절하여 Full Offloading 전략 수립

원문 읽기