2P by neo 15일전 | favorite | 댓글 1개
  • ChatGPT 클론 구현

    • 이 프로그램은 GPT-2의 의존성 없는 구현임.
    • TensorFlow 파일에서 가중치 행렬과 BPE 파일을 로드하고, 입력을 간단한 바이트 쌍 인코더로 토큰화함.
    • 기본 선형 대수 패키지를 구현하고, 변환기 아키텍처를 정의하며, 변환기 추론을 수행하고, BPE 디코더로 출력을 비토큰화함.
    • 약 3000바이트의 C로 작성됨.
    • 효율적으로 최적화되어 GPT-2 Small 모델이 현대 기기에서 몇 초 내에 응답할 수 있음.
    • KV 캐싱과 효율적인 행렬 곱셈 알고리즘을 구현함.
  • 프로그램 구조

    • 기본 행렬 수학 라이브러리 (700바이트)
    • 빠른 행렬 곱셈 (300바이트)
    • 신경망 레이어 (300바이트)
    • 변환기 모델 (600바이트)
    • 바이트 쌍 인코딩 (400바이트)
    • 입출력 (200바이트)
    • 가중치 로딩 (300바이트)
    • 바이트 쌍 인코딩 로딩 (300바이트)
  • ChatGPT와 변환기 배경

    • ChatGPT는 언어 모델과 대화할 수 있는 애플리케이션임.
    • GPT-4는 최신 모델로 매우 인상적임.
    • 이 C 프로그램은 2019년의 약한 모델인 GPT-2를 사용하여 ChatGPT의 동작을 구현함.
    • GPT-2는 고정 크기의 단어 시퀀스를 입력으로 받아 다음 단어를 예측하는 변환기임.
  • C 코드 설명

    • 행렬 수학 시작하기 (700바이트)

      • 신경망은 행렬 연산으로 구성됨.
      • 최소한의 행렬 정의를 사용하여 행렬 라이브러리를 구축함.
      • 매크로를 사용하여 공통 로직을 메타 루틴으로 추출함.
    • 빠른 행렬 곱셈 (300바이트)

      • 기본 행렬 곱셈은 세 개의 루프를 사용하여 구현됨.
      • 메모리와 캐시의 작동 방식 덕분에 동일한 메모리를 반복적으로 읽고 쓰는 것이 더 빠름.
    • 신경망 레이어 (300바이트)

      • 변환기를 작성하기 위해 몇 가지 특별한 신경망 레이어를 정의함.
      • GELU 활성화 함수와 인과적 주의에 필요한 하위 대각선 설정 함수 등을 구현함.
    • 변환기 아키텍처 (600바이트)

      • 변환기를 600바이트로 구현함.
      • 각 레이어에서 키, 쿼리, 값을 계산하고, 주의 행렬을 생성하여 결과를 결합함.
    • 바이트 쌍 인코딩 (400바이트)

      • 언어 모델은 고정 크기의 입력이 필요하므로 단어 조각을 사용하여 토큰을 생성함.
      • 주어진 단어를 개별 문자로 나누고, 인접한 토큰 쌍을 병합함.
    • 가중치 로딩 (300바이트)

      • 신경망의 가중치를 디스크에서 로드함.
      • 가중치는 32비트 부동소수점으로 직렬화되어 있음.
    • 바이트 쌍 인코딩 로딩 (300바이트)

      • 바이트 쌍 인코딩 어휘를 디스크에서 로드함.
      • 파일 형식은 바이트 쌍 인코딩 목록으로 구성됨.
  • 결론

    • 기계 학습의 수십 년의 발전을 몇 천 바이트로 압축할 수 있음.
    • 단순한 신경망의 예시로, 실제 모델 가중치를 제외하고는 모든 것을 포함함.
Hacker News 의견
  • GPT-2를 사용해 친구와 대화를 시뮬레이션했을 때 재미있고 때로는 놀라울 정도로 정확했음. GPT-2와 GPT-3 사이의 큰 도약은 더 큰 모델, 더 많은 데이터, 또는 둘 다 때문인지 궁금함. RLHF가 큰 차이를 만들지만 기본 GPT-3 모델도 충분한 예시가 주어지면 매우 유용했음

  • 간단한 신경망이 실제로 얼마나 간단한지를 보여주는 좋은 예시임. 인공지능은 우리가 돈을 벌기 위해 사용하는 검은 마법임

  • 코드를 실행해보진 않았지만 작은 크기에 감명받았음. 초기 ELISA 프로그램은 더 컸음. 지난 4년 동안 이것을 바이트 단위로 맞출 수 있게 되었음. 마법이 어디에 있는지 힌트가 있다면 설명해주길 바람. GELU 함수인지 bash 스크립트를 통해 다운로드된 모델인지 궁금함

  • GPT-2가 내가 좋아하는 동화를 작성했음. 링크: The Princess, the Fairy Godmother, and the Chest

  • GPT-2가 실제로 채팅에 사용될 수 있도록 조정되었는지 궁금함. 그렇지 않다면 이것을 ChatGPT 클론이라고 부르는 것은 무리라고 생각함

  • LISP가 항상 C보다 나은 것은 아님. 이번에는 허용됨. 코드 링크를 놓쳤다면 여기 있음: C-Chat-GPT-2

  • 어떤 하드웨어에서 실행될 수 있는지 궁금함. huggingface의 양자화된 가중치를 사용할 수 있는지, 어떤 문제나 쿼리에 특히 잘 맞는지 궁금함

  • 요즘 gptscript를 사용하여 쉽게 자신만의 ChatGPT를 구현할 수 있음. 링크: gptscript

  • C 매크로가 정규 표현식과 어떻게 비슷한지 이해하지 못하겠음. C 매크로는 단어를 매칭하고 다른 텍스트로 대체함. 정규 표현식은 상대적으로 복잡한 패턴으로 텍스트를 매칭하며, 자체적으로 텍스트 대체를 하지 않음

  • 로컬에서 실행하여 이 GP2가 생성하는 출력이 어떤지 확인한 사람이 있는지 궁금함