11P by neo 2달전 | favorite | 댓글 1개
  • 구글의 Gemma 모델을 위한 경량, 독립 실행형 C++ 추론 엔진
  • 누구를 위한 프로젝트인가 ?
    • 현대의 대규모 언어 모델(LLM) 추론 엔진은 전통적인 신경망 런타임을 넘어서는 맞춤형 기능을 가진 복잡한 시스템임
    • 고수준 알고리듬과 저수준 계산의 공동 설계를 통한 연구와 혁신의 기회가 있으나, 실험을 위해 설계되지 않은 C++ 추론 런타임과 저수준 계산을 추상화하는 Python 중심의 ML 연구 프레임워크 사이에는 격차가 존재함
    • gemma.cpp는 Gemma 2B와 7B 모델의 최소 구현을 제공하며, 일반성보다는 단순성과 직접성에 중점을 둠
    • gemma.cpp는 실험과 연구 사례를 목표로 하며, 최소한의 의존성으로 다른 프로젝트에 쉽게 통합될 수 있고, 약 2K LoC의 핵심 구현과 4K LoC의 지원 유틸리티로 쉽게 수정 가능
    • CPU 추론을 위해 Google Highway Library의 이식 가능한 SIMD를 활용
    • 프로덕션용 배포를 위해서는 JAX, Keras, PyTorch, Transformers와 같은 Python 프레임워크를 사용하는 표준 배포 경로를 권장

빠른 시작

시스템 요구 사항

  • 시작하기 전에 CMake, Clang C++ 컴파일러(C++17 이상 지원), Kaggle에서 아카이브 추출을 위한 tar가 설치되어 있어야 함

1단계: Kaggle에서 모델 가중치와 토크나이저 획득

  • Kaggle의 Gemma 모델 페이지를 방문하여 Model Variations |> Gemma C++를 선택
  • Variation 드롭다운에는 bfloat16 가중치(더 높은 충실도)와 8비트 전환된 부동 소수점 가중치(더 빠른 추론) 옵션이 포함됨
  • 일반적으로 -sfp 체크포인트로 시작하는 것을 권장

2단계: 파일 추출

  • 동의서를 작성한 후 archive.tar.gz 파일을 다운로드하여 추출
  • 추출된 파일에는 모델 가중치(예: 2b-it-sfp.sbs)와 토크나이저 파일(tokenizer.spm)이 포함됨
  • 이 파일들을 편리한 디렉토리 위치로 이동할 수 있음(예: 이 리포지토리의 build/ 디렉토리)

3단계: 빌드

  • 빌드 시스템은 CMake를 사용함
  • gemma 추론 런타임을 빌드하기 위해 빌드 디렉토리를 생성하고, 최상위 프로젝트 디렉토리에서 cmake를 사용하여 빌드 파일을 생성
  • 8비트 전환된 부동 소수점 가중치(sfp)의 경우, 옵션 없이 cmake를 실행
  • bfloat16 가중치를 다운로드한 경우, 위와 같이 옵션 없이 cmake를 실행하는 대신, WEIGHT_TYPE을 highway의 hwy::bfloat16_t 타입으로 설정하여 cmake를 실행
  • 적절한 cmake 명령을 실행한 후, build/ 디렉토리로 이동하여 make를 실행하여 ./gemma 실행 파일을 빌드

4단계: 실행

  • build/ 디렉토리 내에서 gemma를 실행할 수 있음
  • gemma는 필수 인자를 가지며, 예시로 2b-it-sfp.sbs 가중치 파일과 tokenizer.spm 토크나이저 파일을 사용하여 실행할 수 있음

사용법

  • gemma는 verbosity 플래그에 의해 제어되는 다양한 사용 모드를 가짐
  • 모든 사용 모드는 현재 대화형으로, 새로운 줄 입력 시 텍스트 생성을 트리거

대화형 터미널 앱

  • 기본적으로 verbosity는 1로 설정되어 있으며, gemma가 호출될 때 터미널 기반의 대화형 인터페이스를 제공

명령 줄 도구로 사용

  • gemma 실행 파일을 명령 줄 도구로 사용하기 위해, gemma.cpp에 대한 인자가 완전히 지정된 별칭을 생성하는 것이 유용할 수 있음

프로젝트에 gemma.cpp 라이브러리 포함

  • gemma.cpp를 자체 프로젝트에 포함하는 가장 쉬운 방법은 FetchContent를 사용하여 gemma.cpp와 의존성을 가져오는 것
  • CMakeLists.txt에 다음을 추가할 수 있음

gemma.cpp를 라이브러리로 빌드

  • gemma.cpp는 자체 프로젝트에서 라이브러리 의존성으로 사용될 수 있으며, libgemma 대상을 빌드하여 공유 라이브러리 아티팩트를 생성할 수 있음

감사의 말과 연락처

  • gemma.cpp는 2023년 가을에 Austin Huang과 Jan Wassenberg에 의해 시작되었으며, Phil Culliton, Paul Chang, Dan Zheng의 기여로 2024년 2월에 출시됨
  • 이것은 공식적으로 지원되는 Google 제품이 아님.

GN⁺의 의견:

  1. gemma.cpp는 대규모 언어 모델을 실험하고 연구하는 데 유용한 도구로, C++ 기반의 경량화된 추론 엔진을 제공함으로써 기존의 Python 중심 프레임워크와의 격차를 해소하는 데 기여함
  2. 이 프로젝트는 오픈 소스 커뮤니티에 기여할 수 있는 기회를 제공하며, Google의 오픈 소스 지침을 따르는 것이 중요함을 강조
  3. gemma.cpp는 다양한 사용 모드를 제공하여 개발자와 연구자가 자신의 프로젝트에 쉽게 통합하고 사용할 수 있도록 설계되었으며, 이는 AI 및 ML 분야의 혁신을 촉진할 수 있는 잠재력을 가짐
Hacker News 의견
  • 해커뉴스 댓글 요약:
    • Austin의 소개 및 프로젝트 설명:

      • Austin은 프로젝트의 공동 저자로, 질문에 답하겠다고 함.
      • gemma.cpp는 llama.cpp/ggml과 독립적이며, llama.cpp 프로젝트의 영감을 받았음.
      • gemma.cpp는 gemma의 직접 구현으로, 실험 및 연구와 이식성 및 쉬운 수정에 중점을 둠.
      • 초기 구현은 CPU SIMD 중심이며, GPU 지원에 대한 옵션을 모색 중임.
      • Gemma 모델 자체에 대한 질문은 다른 동료가 답변할 것이며, 이는 C++ 구현이지만 모델 훈련 과정과는 상대적으로 독립적임.
      • Google의 소규모 팀에서 작업했으며, 다른 사람들이 유용하게 사용하기를 바람.
      • 프로젝트에 대한 트위터 스레드 링크 제공.
    • Google의 LLM 경쟁력에 대한 의견:

      • Google이 OpenAI에 비해 상업적 제품에서 뒤처져 있다는 비판이 있지만, LLM 분야에서는 매우 유능함.
      • Google이 움직임을 시작하면 인상적인 성과를 낼 것이라는 의견.
      • Facebook과 Llama 덕분에 오픈소스 경쟁이 계속되길 바라며, OpenAI가 원래의 미션에서 멀어지고 있음에도 그들의 초기 비전이 중요함을 기억해야 함.
    • 빌드 시스템에 대한 질문:

      • 왜 Google이 bazel을 빌드 시스템으로 사용하지 않았는지 궁금해하는 댓글.
    • Gemma의 성과에 대한 칭찬:

      • Gemma가 HHEM 리더보드에 추가되었으며, 작은 모델들 사이에서 낮은 환각율을 보여주고 있음.
    • LLM 오픈소스 생태계의 발전 속도에 대한 감탄:

      • LLM 오픈소스 생태계의 발전 속도가 매우 빠르며, 새로운 정보와 코드가 계속해서 나오고 있음.
    • 모델 포맷에 대한 질문:

      • GGUF, GGML 등 다양한 모델 포맷에 대한 차이점과 이들이 어떻게 관리되는지에 대한 설명을 요청하는 댓글.
    • LLM의 수학 능력에 대한 토론:

      • LLM이 수학 문제를 잘 해결하지 못한다는 설명과, ChatGPT가 수학 문제를 잘 해결하는 것처럼 보이는 이유에 대한 토론.
      • LLM 프로젝트들이 플러그인 모델을 지원하는지, 그리고 llama.cpp를 사용하여 개발한 시스템에 플러그인 접근 방식을 적용할 수 있는지에 대한 질문.
    • Gemma의 콘텐츠 제한 여부에 대한 질문:

      • Gemma가 Gemini처럼 콘텐츠 제한 기능을 내장하고 있는지, 아니면 그것이 Gemini 애플리케이션의 특징인지에 대한 질문.
    • gemma.cpp에 대한 감사와 향후 기능 추가에 대한 기대:

      • gemma.cpp 저장소에 대한 감사를 표하며, Python 래퍼를 개발했다고 함.
      • gemma.cpp 팀에서 새로운 기술을 업데이트할 때마다 쉽게 사용할 수 있도록 Python 래퍼를 개발함.
    • Gemma 모델의 실행 파일 크기에 대한 질문:

      • Gemma 모델을 최소한의 커맨드 라인 인터페이스로 구축하고 오프라인에서 실행 가능한 독립 실행형 파일로 만들 경우 최종 실행 파일의 크기가 얼마나 될지에 대한 질문.