미니 AGI – 8GB VRAM으로 학습하는 지속학습 언어모델
해커뉴스에 'mini-AGI'라는 프로젝트가 공개됐다. 8GB VRAM 소비자용 GPU 한 장으로 처음부터 학습 가능하며, 읽는 모든 것에서 계속 학습하는 바이트 단위 언어모델이다. 가중치를 디스크에 저장하고 필요할 때만 VRAM으로 불러오는 방식으로 파라미터 수를 디스크 용량만큼 확장할 수 있고, 치명적 망각 없는 단일 데이터 스트림 지속학습이 보통 하드웨어에서도 가능함을 보여준다는 점이 핵심이다.
mini-AGI는 스스로 아키텍처를 조립하고, 단일 8GB VRAM GPU에서 처음부터 학습하며, 읽는 모든 것에서 계속 학습하는 지속학습 바이트 단위 언어모델이다. 가중치를 디스크의 일반 파일로 저장하고 필요할 때 GPU로 페이징하기 때문에, 파라미터 수는 VRAM이 아닌 여유 디스크 공간에 의해 결정된다. 학습 중 용량이 부족하면 새로운 용량을 늘리고, 사용되지 않는 부분은 가지치기(prune)하며, 서빙에 사용되는 것과 정확히 동일한 코드 경로로 읽기를 수행한다. 보드에 8GB VRAM GPU 이상을 장착한 PC나 노트북을 대상으로 한다.
참고: 현재 이것은 작은 토이 수준의 모델이다. 최첨단(frontier) 수준의 능력을 기대하지 말라. 이것은 오히려 단일 데이터 스트림으로부터 치명적 망각 없이 지속학습이 가능하다는 것을 보여주는 작은 실험이다. 게다가 그것이 저사양 하드웨어에서도 가능하다. 즉, 거의 모든 사람이 자기 자신의 버전의 모델을 자신이 원하는 대로 학습하거나(또는 이 모델의 학습을 단순히 계속하거나) 할 수 있다. 그리고 그 능력은 실제 하드웨어, 이용 가능한 데이터의 규모와 품질, 그리고 학습에 투자하려는 시간에 의해 결정된다.
미니 런 대시보드는 다음과 같이 생겼다. 모델은 지속적으로 읽고 학습할 말뭉치(corpus)를 가리킨다. History에는 지금까지 전체 학습 실행 이력의 샘플들이 있다. 직접 검토해보면 학습/말뭉치 읽기 과정 동안 모델이 어떻게 발전했는지 확인할 수 있다. 가중치는 아직 공개되지 않았다. 현재 실행은 말뭉치의 첫 패스를 읽는 중이며, 전부 읽고 나면 가중치가 업로드될 것이다. 현재 속도로는 몇 주 정도 남았다.
동기 오늘날 실제로 소유할 수 있는 모든 언어모델은 누군가 학습시킨 뒤 동결(freeze)한 모델이다. 가장자리에서 파인튜닝은 할 수 있지만, 자신의 하드웨어로 처음부터 학습할 수는 없고, 일상에서 하는 일로 계속 학습시킬 수도 없다. 시도하는 순간 이전에 알던 것을 잊어버리기 때문이다. 그 결과, 개인 모델은 언제나 '남의 모델 위에 얇은 자기 자신의 층'일 뿐이고, 출하되는 날 학습을 멈춘다.
mini-AGI 모델은 GPU 사용량이 충분히 작아 소비자용 카드 한 장으로 엔드투엔드 학습이 가능하며, 학습이 절대 멈출 필요가 없도록 설계되었다. 문자 스트림을 한 청크씩 읽고 각각에 대해 그래디언트 스텝을 밟으며, 동일한 경로가 생성(generation)을 담당한다. 별도의 파인튜닝 체제도, 동결된 베이스도 없다. 읽는 것과 학습되는 것이 같은 사건이다.
설계의 나머지 모든 것을 결정하는 세 가지 제약이 있다:
- 8GB에 들어가야 한다. 양자화(quantisation)로가 아니라 - 학습에는 그래디언트와 옵티마이저 상태가 필요하고, 이는 대략 가중치의 3배 크기다. 따라서 가중치는 디스크에 두고 작업 집합(working set)만 상주시킨다.
- 잊지 말아야 한다. 지속적으로 학습하면서 자기 자신을 덮어써버리는 모델은 아예 학습하지 않는 모델보다 나쁘다.
- 무엇이든 읽을 수 있어야 한다. 알파벳은 256개의 바이트 값이므로, 맞춰야 할 토크나이저도 없고 새 어휘가 필요한 데이터 타입도 없다.
이 모델은 진정으로 당신 것이다. 당신의 하드웨어에서, 당신의 데이터로 학습되고, 당신과 나누는 모든 대화에서 계속 학습하며, 누구도 그것을 가져가거나 끌 수 없다.
아키텍처 동작 방식 문자(바이트)는 전통적인 LLM처럼 고정된 층 스택을 통과하지 않는다. 대신 두 개의 dense prelude 블록을 통과한 뒤, 하나의 순환(recurrent) 블록이 최대 24회 적용되며, 각 적용은 공유 풀에서 자신의 익스퍼트를 선택한다. 적용 사이의 잠재 상태(latent state)는 절대 디코딩되지 않으며, 매번 어댑터를 통해 임베딩된 입력과 병합되므로, 루프가 읽고 있는 텍스트에서 벗어나 표류할 수 없다. 문자당 최대 26개의 블록 적용이 있는 세 개의 서로 다른 블록이다.
적응적 깊이(Adaptive depth). 정지(halting) 헤드가 모든 행에서 모든 문자에 점수를 매기고, 다른 행이 답을 바꾸지 않는다고 판단되면 문자 처리를 멈춘다. 쉬운 문자는 한 행, 어려운 문자는 여러 행을 사용한다.