NETBYTE
프로젝트 시작하기

연구

Helix 1부: 유럽 언어 모델을 훈련하다

저희는 자체 언어 모델을 훈련하고 있습니다. 파라미터 3억 2천만 개로 작은 모델이지만, 유럽연합의 공용어 24개를 모두 읽고 게임용으로 만들어진 그래픽카드에서 학습합니다. 1부에서는 여기까지 온 과정을 다루고, 2부는 학습이 끝나면 이어집니다.

글 Marcus Weitschat 8분 분량

Helix의 각 토큰이 주의를 기울일 수 있는 범위를 보여 주는 점 행렬: 파란 띠는 로컬 윈도, 노란 점은 자기 블록, 흩어진 주황 점은 먼 거리 기억 회수를 나타냅니다.

게임 스튜디오가 언어 모델을 훈련하는 이유

NETBYTE는 게임, 앱, 웹사이트를 만듭니다. 이런 제품 안에 언어 모델이 들어가는 일이 점점 늘고 있습니다. 말을 받아 주는 캐릭터, 질문을 이해하는 도움말, 실제로 무언가를 처리하는 도구로서 말이죠. 대부분의 공개 모델은 영어를 먼저 생각하고, 에스토니아어나 아일랜드어, 몰타어는 뒷전입니다. 저희는 데이터, 토크나이저, 아키텍처, 학습까지 전 과정을 직접 이해하고, 비용이 실제로 어디에 드는지 알고 싶었습니다.

파라미터
3.2억
EU 공용어
24
학습 토큰
65억
임대 GPU 비용
≈ $12

Helix는 연구용 프로토타입으로 시작했습니다. 아래 내용은 모두 모델을 만든 결정이며, 각각 측정으로 뒷받침됩니다. 시간을 가장 많이 잡아먹은 실수들도 함께 적었습니다.

네 가지 아이디어, 살아남은 하나

프로토타입은 오늘날 텍스트 생성기의 잘 알려진 약점 네 가지를 겨냥했습니다. 토큰을 하나씩 쓰는 대신 16개 토큰 블록 단위로 쓰고, 공유된 레이어 코어를 여러 번 반복해 통과할 수 있으며, 블록마다 압축된 ‘계획’을 예측하고, 값싼 로컬 어텐션에 먼 거리용 선형 어텐션을 섞습니다.

블록 단위 쓰기는 바로 효과가 있었습니다. 작은 테스트 모델이 네트워크를 13번 통과해 64개 토큰을 썼는데, 일반 모델은 토큰마다 한 번씩 통과해야 하니 작업량이 약 5분의 1입니다. 나머지 세 아이디어는 더 어려운 시험에서 떨어졌습니다. 답이 로컬 윈도 훨씬 바깥에 있어서 모델이 텍스트 전체를 거슬러 봐야 하는 과제를 만들었기 때문입니다.

그림 1 먼 거리 기억 회수 단서가 로컬 윈도 밖에 있는 회수 과제의 정답률. 작은 기준 모델이며, 모든 변형에 같은 예산을 썼습니다.
  1. 로컬 윈도만 23.1%
  2. + 선형 어텐션, 계획, 반복 23.1%
  3. + 정확한 전역 헤드 2개 49.4%
  4. 전체 어텐션 (대조군) 49.0%
데이터 보기
변형정답률
로컬 윈도만23.1%
+ 선형 어텐션, 계획, 반복23.1%
+ 정확한 전역 헤드 2개49.4%
전체 어텐션 (대조군)49.0%
무작위 (25%)25.0%

이 과제는 거리 전체에 걸친 정확한 어텐션만 풀었습니다. 선형 어텐션, 계획, 반복은 찍기 수준에 머물렀고, 옵티마이저는 선형 메모리의 반감기를 토큰 하나보다 짧게 줄여 버리기까지 했습니다. 정확한 전역 헤드 두 개만으로 전체 어텐션을 따라잡을 수 있었습니다.

그래서 최종 모델은 모든 레이어에 256토큰 윈도의 로컬 헤드 여덟 개를 두고, 한 레이어 걸러 정확한 전역 헤드 두 개를 더합니다. 그 사이 레이어에는 게이트 선형 어텐션 헤드 두 개가 남아 있습니다. 계획과 반복은 꺼 두었습니다. 코드에 남아 있고 테스트도 되어 있지만, 실제 텍스트에서는 비용만큼의 값을 하지 못했습니다.

그림 2 레이어별로 보는 범위 레이어당 어텐션 헤드 10개, 레이어 12개. 모든 레이어에 로컬 헤드 8개가 있고, 홀수 레이어에는 정확한 전역 헤드 2개가, 짝수 레이어에는 게이트 선형 어텐션 헤드 2개가 더해집니다.
  • 로컬, 256토큰 윈도
  • 정확한 전역 어텐션
  • 게이트 선형 어텐션
데이터 보기
헤드 종류레이어레이어당 헤드
로컬, 256토큰 윈도1–128
정확한 전역 어텐션1, 3, 5, 7, 9, 112
게이트 선형 어텐션2, 4, 6, 8, 10, 122

추측하지 말고 측정하기

모든 학습 기법은 파라미터 9,400만 개짜리 모델에서 실행마다 같은 예산으로 시험했습니다. 토큰 2,950만 개, 같은 시드, 같은 데이터 순서입니다. 같은 설정을 두 번 실행하면 ±0.03만큼 차이가 나므로, 그보다 작은 차이는 모두 노이즈입니다.

그림 3 도움이 된 것과 노이즈였던 것 AdamW 기준 대비 검증 손실 변화. 파라미터 9,400만 개 모델, 실행당 토큰 2,950만 개. 0보다 낮을수록 좋고, 회색 띠는 실행 간 노이즈(±0.03)입니다.
  1. Muon + WSD 스케줄 -0.587
  2. Muon 옵티마이저 -0.347
  3. 더 깊고 좁은 네트워크 -0.099
  4. WSD 스케줄 -0.080
  5. 값 잔차 연결 -0.007
  6. z-loss +0.029
  7. 그룹 쿼리 어텐션 +0.088
데이터 보기
변경Δ 손실 (나트)
Muon + WSD 스케줄-0.587
Muon 옵티마이저-0.347
더 깊고 좁은 네트워크-0.099
WSD 스케줄-0.080
값 잔차 연결-0.007
z-loss+0.029
그룹 쿼리 어텐션+0.088

Muon 옵티마이저가 유일하게 큰 효과를 냈고, warmup-stable-decay 학습률 스케줄과 함께 쓸 수 있습니다. Muon 저자들이 권하는 대로 임베딩과 출력 레이어를 다시 AdamW로 돌리자 0.12가 더 좋아졌고 학습도 5% 빨라졌습니다. 조합은 단순히 더해지지 않습니다. 더 깊고 좁은 네트워크는 AdamW에서는 도움이 됐지만 Muon에서는 오히려 손해였습니다. 그래서 유망한 조합마다 따로 실행했습니다.

24개 언어, 65억 토큰

Helix는 영어는 FineWeb-Edu에서, 나머지 23개 언어는 FineWeb-2에서 웹 텍스트를 읽습니다. 큰 언어는 그중 품질 필터를 거친 상위 10%를 씁니다. 코드, 수학, 작은 합성 채팅 스트림이 혼합을 완성합니다. 영어가 3분의 1을 차지합니다. 나머지 언어는 존재하는 텍스트 양에 따라 가중치를 주되, 아일랜드어와 몰타어가 묻히지 않도록 평탄화했습니다. 어떤 출처도 네 번 넘게 반복하지 않는데, 그 정도까지는 반복이 새 데이터와 거의 비슷하게 좋기 때문입니다.

그림 4 Helix가 읽는 것 출처 그룹별 학습 토큰 비율. 34개 스트림, 65억 토큰 코퍼스입니다. 코드와 마크업에는 Python, JavaScript, C, C++, Java, HTML, CSS, Markdown이 포함됩니다.
  1. 기타 EU 언어 23개 51.6%
  2. 영어 33.0%
  3. 코드와 마크업 10.0%
  4. 수학 3.0%
  5. 합성 채팅과 도구 2.4%
데이터 보기
출처비율
기타 EU 언어 23개51.6%
영어33.0%
코드와 마크업10.0%
수학3.0%
합성 채팅과 도구2.4%

채팅 스트림은 추출식입니다. 답변은 실제 문단에서 가져오고, 도구 결과는 지어내지 않고 계산합니다. 지식이 아니라 형식을 가르치는 데이터입니다. 토크나이저는 항목 64,000개의 바이트 수준 BPE로, 라틴 문자를 쓰는 모든 언어에서 토큰 하나에 텍스트 3.3~4바이트를 담습니다.

이야기할 만한 버그 세 가지

  • 답을 미리 읽은 모델. 한 코드 경로에서 전역 헤드가 인과 마스크를 무시해 미래 토큰을 볼 수 있었습니다. 손실이 75스텝 만에 6.85에서 1.71로 떨어졌고, 16시간짜리 실행 하나가 쓸모없어졌습니다. 의심스러울 만큼 좋은 손실은 버그 신고입니다. 이제 회귀 테스트가 바로 이 경우를 지킵니다.
  • 문자는 바이트가 아니다. 압축률을 UTF-8 바이트가 아니라 문자 단위로 셌습니다. 그 때문에 중국어에 없는 ‘약점’이 생겼고, 그리스어와 불가리아어는 실제보다 거의 두 배나 나빠 보였습니다.
  • 빈 줄마다 잘린 문서. 인코더가 빈 줄이 나올 때마다 문서를 나눴는데, 빈 줄은 거의 모든 소스 파일 한가운데에 있습니다. 코드와 수학 텍스트의 최대 35%가 사라졌습니다. 구분자를 고치고 10월 31일에 코퍼스 전체를 다시 만들었고, 2시간 12분이 걸렸습니다.

책상에서 임대 장비로

처음 16억 6천만 토큰은 AMD Radeon RX 7800 XT 한 장에서 돌렸습니다. 이를 쓸 만하게 만든 것은 두 가지입니다. 기본값이 꺼져 있는 어텐션 커널 플래그(이것 없이는 어텐션이 12배 느렸습니다)와 torch.compile로 모든 레이어를 컴파일한 것입니다. 초당 토큰 중앙값 11,800개로는 나머지를 마치는 데 거의 닷새가 더 걸렸을 겁니다.

그래서 오토파일럿을 만들었습니다. Vast.ai에서 GPU를 빌리고, 코드와 코퍼스와 체크포인트를 올리고, 학습하고, 세 시간마다 체크포인트를 집으로 가져오고, 크레딧이 떨어지기 전에 멈춥니다. 11월 2일에는 제공자가 끝내 시작하지 않은 장비 세 대를 거친 뒤 독일에 있는 RTX 4070 Ti Super 두 장에 시간당 $0.363로 자리 잡았습니다. 15.4 GiB 업로드에는 40분이 걸렸습니다.

그림 5 학습 속도 시퀀스 길이 1,024에서 3억 2천만 파라미터 모델의 초당 토큰 수(중앙값). 로컬: AMD Radeon RX 7800 XT 1장. 임대: NVIDIA RTX 4070 Ti Super 2장.
  1. 로컬, 최적화 전 8,319
  2. 로컬, 컴파일 후 11,830
  3. 임대, GPU 2장 41,367
데이터 보기
구성토큰/초
로컬, 최적화 전8,319
로컬, 컴파일 후11,830
임대, GPU 2장41,367

초당 41,400 토큰은 책상 장비의 3.5배입니다. 임대한 부분, 즉 약 33시간 동안의 48억 토큰은 대략 $12가 듭니다.

Helix의 현재 위치

그림 6 지금까지의 학습 토큰당 나트 단위 손실이며 낮을수록 좋습니다. 홀드아웃은 모델이 한 번도 학습하지 않는 텍스트입니다. 학습 손실은 5천만 토큰마다 평균을 냈고, 쿨다운에서는 데이터 혼합이 바뀌는 영향도 있어 더 빨리 떨어집니다. 축은 계획된 65억 토큰에서 끝납니다.
  • 홀드아웃
  • 학습

손실 (토큰당 나트)

읽은 토큰 (10억 단위)

데이터 보기
읽은 토큰 (10억 단위)홀드아웃학습
0.064.5714.261
0.553.7763.574
1.043.6943.469
1.543.5963.421
2.033.4263.238
2.523.3293.143
3.013.2913.113
3.503.2633.076
3.993.2253.079
4.493.2443.076
4.983.2183.036
5.353.1232.884

2026년 11월 3일 기준으로 Helix는 65억 토큰 중 53억 5천만 토큰을 읽었습니다. 52억 토큰부터는 쿨다운 단계입니다. 학습률이 내려가고 혼합 비율이 수학, 코드, 채팅 쪽으로 옮겨 갑니다. 모든 스트림의 홀드아웃 텍스트에서 손실은 토큰당 3.12나트입니다.

그림 7 언어별 현황 53억 5천만 토큰 학습 후 홀드아웃 텍스트의 바이트당 비트이며 낮을수록 좋습니다. 그리스어와 불가리아어는 글자 하나가 2바이트를 차지하는 탓도 있어 더 좋아 보입니다.
  1. 그리스어 0.721
  2. 불가리아어 0.844
  3. 프랑스어 1.065
  4. 영어 1.086
  5. 스페인어 1.135
  6. 포르투갈어 1.219
  7. 독일어 1.257
  8. 네덜란드어 1.268
  9. 이탈리아어 1.277
  10. 폴란드어 1.355
  11. 덴마크어 1.364
  12. 헝가리어 1.407
  13. 슬로바키아어 1.412
  14. 몰타어 1.415
  15. 루마니아어 1.416
  16. 스웨덴어 1.418
  17. 아일랜드어 1.422
  18. 슬로베니아어 1.431
  19. 체코어 1.444
  20. 리투아니아어 1.450
  21. 라트비아어 1.451
  22. 크로아티아어 1.507
  23. 핀란드어 1.508
  24. 에스토니아어 1.727
데이터 보기
언어바이트당 비트
그리스어0.721
불가리아어0.844
프랑스어1.065
영어1.086
스페인어1.135
포르투갈어1.219
독일어1.257
네덜란드어1.268
이탈리아어1.277
폴란드어1.355
덴마크어1.364
헝가리어1.407
슬로바키아어1.412
몰타어1.415
루마니아어1.416
스웨덴어1.418
아일랜드어1.422
슬로베니아어1.431
체코어1.444
리투아니아어1.450
라트비아어1.451
크로아티아어1.507
핀란드어1.508
에스토니아어1.727

이게 실제로 무엇을 뜻하는지는 약 49억 토큰 시점 체크포인트에서 뽑은, 손대지 않은 샘플이 가장 잘 보여 줍니다. 앞부분은 저희가 쓴 것이고 나머지는 Helix가 썼습니다.

영어 샘플, 49억 토큰 시점 체크포인트, 편집 없음

시작 문장: The history of the printing press begins in the fifteenth century, when Johannes Gutenberg introduced movable type to Europe. Before that, books 모델 출력: for printing were usually in the form of texts, usually in the format of illustrations. In its introduction to the printing press, Gutenberg uses one line-of-action model to illustrate a series of printed pieces of a book.

문법, 단어 선택, 주제는 유지되지만 사실은 그렇지 않습니다. 파라미터 3억 2천만 개와 토큰 65억 개에서 기대할 수 있는 수준이 대략 이 정도입니다. 유창하지만 지어내는 모델이죠.

다음 단계

사전 학습은 몇 시간 안에 끝납니다. 그다음에는 Project Gutenberg의 책과 EUR-Lex의 EU 법률 문서로 하는 긴 문맥 단계, 대화와 도구 사용을 위한 미세 조정, 그리고 생성 속도를 높이는 작은 초안 모델이 이어집니다.

전체 글로 돌아가기

다음 단계

다음에는 무엇을 만드시겠습니까?

게임, 앱, 웹사이트 또는 AI 프로젝트에 대해 이야기해 주십시오. 짧은 메시지 하나면 시작하기에 충분합니다.