--- license: apache-2.0 library_name: transformers pipeline_tag: text-generation tags: - aether - mixture-of-experts - heterogeneous-attention - korean - vidraft - base-model - fully-open language: - ko - en datasets: - HuggingFaceFW/fineweb-edu - HuggingFaceTB/smollm-corpus - HuggingFaceTB/finemath - open-web-math/open-web-math - OpenCoder-LLM/opc-fineweb-code-corpus - HAERAE-HUB/KOREAN-WEBTEXT - HAERAE-HUB/KOREAN-SyntheticText-1.5B --- # Aether-7B-5Attn — Base **Aether family** — [![5Attn IT](https://img.shields.io/badge/%F0%9F%92%AC_Aether--7B--5Attn--it-Instruct-green)](https://huggingface.co/FINAL-Bench/Aether-7B-5Attn-it) [![7Attn Base](https://img.shields.io/badge/%F0%9F%A7%A9_Aether--7B--7Attn--base-Open_Weights-teal)](https://huggingface.co/FINAL-Bench/Aether-7B-7Attn-base) [![11Attn](https://img.shields.io/badge/%F0%9F%94%9F_Aether--6B--11Attn-Open_Weights-purple)](https://huggingface.co/FINAL-Bench/Aether-6B-11Attn) [![Checkpoints](https://img.shields.io/badge/%F0%9F%97%82%EF%B8%8F_Checkpoints-Intermediate-lightgrey)](https://huggingface.co/datasets/FINAL-Bench/Aether-7B-5Attn-checkpoints) [![Demo](https://img.shields.io/badge/%F0%9F%9A%80_Demo-Aether_Sovereign_AI-orange)](https://huggingface.co/spaces/FINAL-Bench/Aether-Sovereign-AI) [![Blog](https://img.shields.io/badge/%F0%9F%93%9D_Blog-Open_Source_LLM-yellow)](https://huggingface.co/blog/FINAL-Bench/opensource-llm) [![Collection](https://img.shields.io/badge/%F0%9F%93%9A_Collection-Aether_Foundation-blue)](https://huggingface.co/collections/FINAL-Bench/aether-foundation-model) ![Aether-7B-5Attn](aether_hero.png) [![Blog](https://img.shields.io/badge/%F0%9F%A4%97%20Blog-Aether%20이야기%20읽기-FFD21E)](https://huggingface.co/blog/FINAL-Bench/opensource-llm) > 📚 **[Aether Foundation Model 컬렉션](https://huggingface.co/collections/FINAL-Bench/aether-foundation-model) 의 일부** — 베이스·instruct·체크포인트를 한곳에서. > 🧩 **중간 체크포인트** (110k · 115k · 162k)는 데이터셋으로 공개: [Aether-7B-5Attn-checkpoints](https://huggingface.co/datasets/FINAL-Bench/Aether-7B-5Attn-checkpoints). ## 🇰🇷 학습 데이터와 학습 코드까지 전부 공개하는 한국 최초의 파운데이션 모델 **49층에 어텐션을 7×7 라틴 방진으로 배치한 6.59B MoE 언어모델.** 가중치 · **학습 데이터 레시피** · **학습 코드** · **학습 로그 전문** · **아키텍처 소스 전체** 를 남김없이 공개합니다. NVIDIA **B200 16장**(2-node FSDP)으로 **약 46일**, 총 **144.2B 토큰**을 처음부터 학습했습니다. **Apache-2.0** --- ## 1. 왜 전부 공개하는가 오늘날 "오픈 LLM" 대부분은 **가중치만** 줍니다. 가중치만으로는 모델을 이해할 수도, 검증할 수도, 처음부터 다시 만들 수도 없습니다. 무엇을 먹였는지 모르는 모델은 블랙박스일 뿐이고, 그 위에 국가와 기업의 AI 주권을 세울 수는 없습니다. **Allen Institute의 OLMo는 "진짜 오픈"의 기준을 다시 세웠습니다** — 가중치뿐 아니라 학습 데이터·학습 코드·로그까지 공개해야 비로소 과학이 된다는 기준입니다. Aether는 그 기준을 따릅니다. ### 우리가 공개하는 것 | | 항목 | Aether | |---|------|--------| | 1 | 가중치 (annealing 완료 베이스) | ✅ | | 2 | **아키텍처 소스 전체** — 5종 어텐션·MoE·라틴 방진 배치 구현 | ✅ `aether_pkg/` | | 3 | **학습 데이터 레시피** — 소스 저장소·config·토큰 수·배합 가중치·토크나이저·EOS | ✅ §5 | | 4 | **토큰화 스크립트** — 우리가 쓴 그 파일 그대로 | ✅ `tokenize_one.py` | | 5 | **학습 코드** — FSDP 런처·학습 루프·노드 실행 스크립트 | ✅ `launcher_v2b_multi.py` 외 | | 6 | **학습 하이퍼파라미터 전체** | ✅ §5 | | 7 | **학습 로그 전문** — 162,000 스텝 30일 기록 | ✅ `logs/` | | 8 | **평가 코드** | ✅ `eval/lmeval_run.py` | | 9 | 중간 체크포인트 (110k · 115k · 162k) | ✅ | | 10 | 라이선스 | ✅ **Apache-2.0** | **§5의 레시피만으로 제3자가 우리 학습 데이터를 바이트 단위로 동일하게 재구성할 수 있습니다.** 소스가 전부 공개 저장소이므로, 토크나이저와 EOS와 배합 가중치가 같으면 결과 바이너리도 같습니다. 검증하십시오. 그러라고 공개합니다. ### 한국 파운데이션 모델 최초입니다 한국에서 처음부터 학습된 파운데이션 모델은 이전에도 있었습니다. 그러나 **학습 데이터를 공개한 모델은 없었습니다.** 우리가 아는 한 Aether가 처음입니다. 이것이 **소버린 AI**의 실질입니다. 어느 나라, 어느 기업, 어느 연구실이든 이 저장소만으로 자신의 파운데이션 모델을 **처음부터 다시** 만들 수 있어야 합니다. 가중치만 받아 쓰는 것은 주권이 아닙니다. --- ### 오픈소스 완전공개 LLM 비교 (6개국) ![Open-source LLM comparison](opensource_llm_comparison.png) *소버린 완전공개 LLM 6개국 대비. 개방 항목은 모두 대등하며, 비드래프트의 차별점은 유일한 한국 AI 스타트업이라는 점과 5종(최다) 어텐션·라틴방진 구조입니다.* ## 2. 설계 — 왜 모든 층이 같은 어텐션이어야 하는가 ### 2.1 하나의 어텐션이 모든 층을 담당해야 할 이유는 없습니다 GPT 이후 거의 모든 트랜스포머는 **모든 층에서 똑같은 어텐션을 씁니다.** 49층짜리 모델이라면 49번 같은 연산을 반복합니다. 그런데 층마다 하는 일은 다릅니다. 초기 층은 국소적인 문법·형태소 패턴을 잡고, 중간 층은 구문 구조를, 후기 층은 문서 전체를 가로지르는 의미 관계를 다룹니다. **하는 일이 다른데 왜 같은 연산을 강요받아야 합니까.** 이건 성능 문제 이전에 **설계 가정의 문제**입니다. "모든 층 = 같은 어텐션"은 검증된 결론이 아니라 **한 번도 진지하게 의심받지 않은 관행**입니다. Aether는 그 가정을 풀어봅니다. ### 2.2 어텐션은 저마다 다른 귀납 편향을 가집니다 | 종류 | 잘하는 것 | 대가 | |------|-----------|------| | `full` | 모든 토큰 쌍을 정확히 봅니다. 정보 손실 0 | 길이에 **제곱**으로 비쌉니다 | | `sliding` | 국소성을 아주 싸게 봅니다 (길이에 선형) | 윈도우 밖은 못 봅니다 | | `differential` | 두 어텐션 맵의 **차이**를 취해 공통 노이즈를 상쇄합니다 | 헤드 차원을 반으로 나눠 씁니다 | | `nsa` | 압축·선택·슬라이딩을 게이트로 묶어 장거리를 싸게 봅니다 | 구조가 복잡합니다 | | `hybrid` | `nsa`의 장거리와 `differential`의 노이즈 억제를 함께 씁니다 | 가장 비쌉니다 | **어느 하나가 다른 것들을 지배하지 않습니다.** 각자 잘하는 게 다르고 대가도 다릅니다. 그렇다면 **한 종류만 골라 49번 반복하는 것은, 그 종류의 약점도 49번 반복하는 것**입니다. ### 2.3 라틴 방진 — 가정을 공정하게 시험하는 장치 "섞으면 좋을 것 같다"는 직관은 쉽지만, 아무렇게나 섞으면 **결과를 배치 탓인지 종류 탓인지 구분할 수 없습니다.** `full`이 우연히 후기 층에 몰리면 그 모델은 "이종이라서" 잘한 게 아니라 "후기 층이 full이라서" 잘한 것이 됩니다. 49층 = **7 × 7 라틴 방진**으로 구성한 이유가 이것입니다. 라틴 방진은 **각 종류가 각 위치에 정확히 한 번씩** 나타나도록 보장하는 조합론적 배치입니다. 특정 종류가 특정 깊이에 편중되는 것을 **구조적으로** 막습니다. 즉 라틴 방진은 장식이 아니라 **통제 장치**입니다. 이 배치 덕분에 "이종 배치의 효과"라는 질문을 배치 편향 없이 던질 수 있습니다. **우리가 아는 한, 이종 어텐션을 라틴 방진으로 배치한 공개 모델은 없습니다.** --- ## 3. 어텐션 구성 — 라틴 방진 7×7, 49층 49층에 7개의 어텐션 라벨이 라틴 방진을 따라, **각각 정확히 7개 층씩** 배치됩니다 (7 × 7 = 49). | 라벨 | 층 수 | 설명 | |------|------|------| | `full` | 7 | 표준 인과 어텐션 (SDPA) | | `differential` | 7 | Q·K를 반으로 나눠 두 어텐션 맵을 만들고 λ 가중으로 빼서 공통 노이즈를 상쇄 | | `sliding` | 7 | 슬라이딩 윈도우 (window = 512) — full 경로 위의 마스킹 | | `nsa` | 7 | 압축·선택·슬라이딩 브랜치를 학습된 게이트로 결합 | | `hybrid` | 7 | `nsa` + `differential` 결합 | | `compress` | 7 | NSA 블록평균 경로 — 본 체크포인트에서는 full 경로로 동작 | | `linear` | 7 | SDPA + 학습 게이트 | | **합계** | **49** | | **모델명 `5Attn`의 유래.** 위 7개 라벨은 **5종의 서로 다른 메커니즘**으로 환원됩니다 — `compress`는 full 경로로, `linear`는 SDPA + 게이트로 동작합니다. 모델명은 라벨 수(7)가 아니라 **메커니즘 수(5)**를 따릅니다. 배치 규칙과 각 라벨의 구현 전체는 `aether_pkg/` 에 공개되어 있습니다. `LATIN_SQUARE_7x7` 에서 층↔라벨 대응을 직접 확인하실 수 있습니다. ### 3.1 메커니즘별 비용 프로파일 (실측) 5종 메커니즘 각각을 단독 1개 층으로 놓고 prefill 지연시간과 최대 메모리를 측정했습니다. 어텐션의 연산·메모리 비용은 **학습된 가중치 값과 무관한 아키텍처 고유 속성**이므로, 이 표는 누구나 재현할 수 있습니다. | 종류 | 2K (ms / GB) | 8K (ms / GB) | 32K (ms / GB) | |------|--------------|--------------|---------------| | `full` | 0.4 / 0.0 | 1.5 / 0.2 | 13.6 / 0.7 | | `differential` | 0.5 / 0.1 | 3.7 / 0.3 | 46.5 / 1.1 | | **`sliding`** | 0.6 / 0.1 | 1.9 / 0.2 | **7.6 / 0.8** | | `nsa` | 1.0 / 0.1 | 3.6 / 0.3 | 26.8 / 3.5 | | `hybrid` | 1.5 / 0.1 | 7.7 / 0.3 | 74.7 / 3.5 | **§2.2에서 말한 "종류마다 다른 대가"가 숫자로 나타납니다.** - **32K에서 `sliding`(7.6ms)이 `full`(13.6ms)보다 1.8배 빠릅니다.** 국소성만 보도록 설계된 대로 동작합니다. 문맥이 길어질수록 격차가 벌어집니다 (2K에서는 오히려 `full`이 빠릅니다). - `hybrid`는 `nsa`와 `differential`을 **둘 다** 실행하므로 비용도 둘의 합에 수렴합니다 (26.8 + 46.5 ≈ 74.7). - 모델 전체는 32K 문맥을 **3.46 GB**로 처리합니다. 우리가 아는 한 **이종 어텐션 종류별 비용 프로파일을 실측해 공개한 사례는 없습니다.** 이 표 자체가 후속 연구를 위한 자료입니다. > 이 표는 **비용**만 말합니다. 출력 품질에 대해서는 아무것도 주장하지 않습니다. 품질 비교에는 어텐션 구성만 다르고 나머지가 전부 동일한 통제 실험이 필요하며, 그것은 별도로 수행되어야 합니다. --- ## 3.2 구조 심화 — 7×7 라틴 직교 배치 ![7x7 Latin-Square Attention Placement](latin_square_7x7.png) 49개 층은 **7 × 7 라틴 방진(Latin square)** 을 이룹니다. 각 층의 어텐션 종류는 다음 규칙으로 정해집니다: ``` attention_type(layer) = ATTN_TYPES[(row + col) mod 7] 단, row = layer // 7, col = layer % 7 ``` ### 라틴 방진의 성질 (구조적 특이성) - **각 종류가 모든 행에 정확히 한 번, 모든 열에도 정확히 한 번** 나타납니다 (7종 × 7층 = 49). 이것이 "라틴 방진"의 정의입니다. - 그 결과 **어떤 어텐션 종류도 특정 깊이(초기·중간·후기 층)에 편중되지 않습니다.** 순환 이동(+1)으로 배치되어 깊이 방향으로 고르게 분산됩니다. - **왜 7인가**: 7은 소수(prime)이므로 순환 이동 `(row+col) mod 7` 이 완전한 라틴 방진(각 행·열이 7종의 순열)을 만듭니다. 7²=49층으로 딱 떨어집니다. ### 왜 이렇게 배치하는가 — 통제 장치 "섞으면 좋을 것 같다"는 직관은 쉽지만, 아무렇게나 섞으면 **결과가 배치 편향 탓인지 종류 탓인지 구분할 수 없습니다.** `full` 이 우연히 후기 층에 몰리면 "이종이라서" 잘한 게 아니라 "후기 층이 full 이라서" 잘한 것이 됩니다. **라틴 방진은 이 편향을 구조적으로 제거합니다.** 각 종류가 모든 깊이를 정확히 한 번씩 거치므로, "이종 배치의 효과"라는 질문을 **깊이 편향 없이** 던질 수 있습니다. 즉 라틴 방진은 성능을 위한 장식이 아니라 **재현 가능한 과학을 위한 통제 장치**입니다. ### 7개 라벨 → 5개 메커니즘 방진에 배치되는 라벨은 7개(`nsa`·`differential`·`full`·`linear`·`sliding`·`compress`·`hybrid`)이지만, **서로 다른 메커니즘은 5개**입니다 — `compress` 는 full 경로로, `linear` 는 SDPA+게이트로 동작합니다(그림에서 빗금). 모델명 `5Attn` 은 라벨 수(7)가 아니라 **메커니즘 수(5)** 를 따릅니다. *우리가 아는 한, 이종 어텐션을 라틴 방진으로 배치한 공개 모델은 없습니다.* ## 4. 사양 | 항목 | 값 | |------|-----| | 총 파라미터 | **6.59B** | | 활성 파라미터 | **~2.98B** (토큰당) | | 층 | 49 (7×7 라틴 방진) | | 전문가 | 25개, top-7 라우팅, 공유 전문가 1개 | | expert intermediate | 640 | | hidden / intermediate | 2048 / 6144 | | heads / KV heads / head_dim | 16 / 4 / 128 | | 어휘 | 151,936 (Qwen 호환 토크나이저) | | 학습 컨텍스트 | 4096 | | dtype | bfloat16 | | 크기 | 13.2 GB | | 클래스 | `AETHERV27wayForCausalLM` (`trust_remote_code=True`) | --- ## 5. 학습 데이터 — 전체 레시피 **아래 정보만으로 제3자가 학습 데이터를 바이트 단위로 동일하게 재구성할 수 있습니다.** ### 5.1 소스 | 파일 | 저장소 | config | 토큰 | 라이선스 | |------|--------|--------|------|----------| | `eng_fineweb_edu.bin` | `HuggingFaceFW/fineweb-edu` | `sample-100BT` | 15.000B | ODC-By | | `syn_cosmopedia.bin` | `HuggingFaceTB/smollm-corpus` | `cosmopedia-v2` | 8.000B | ODC-By | | `math_finemath.bin` | `HuggingFaceTB/finemath` | `finemath-3plus` | 6.002B | ODC-By | | `code_opc.bin` | `OpenCoder-LLM/opc-fineweb-code-corpus` | default | 5.001B | MIT | | `math_owm.bin` | `open-web-math/open-web-math` | default | 4.004B | 원 저장소 참조 | | `kor_webtext.bin` | `HAERAE-HUB/KOREAN-WEBTEXT` | default | 2.492B | 원 저장소 참조 | | `kor_synth.bin` | `HAERAE-HUB/KOREAN-SyntheticText-1.5B` | default | 1.650B | 원 저장소 참조 | | `phase15_mix_90b.bin` | 위 소스들의 선행 혼합본 | — | 90B | — | 전처리: `AutoTokenizer.from_pretrained("Qwen/Qwen3-14B")`, 문서 경계에 **EOS 151645** 삽입, `uint32` 배열로 기록. 재현 스크립트 `tokenize_one.py` 를 함께 공개합니다. ```bash python tokenize_one.py HuggingFaceFW/fineweb-edu sample-100BT text 15 out/eng_fineweb_edu.bin ``` ### 5.2 배합비 ```python DATA_POOL = [ # (파일, 샘플링 가중치) ("phase15_mix_90b.bin", 1.0), ("eng_fineweb_edu.bin", 2.0), ("syn_cosmopedia.bin", 2.0), ("math_finemath.bin", 3.5), ("math_owm.bin", 3.5), ("code_opc.bin", 2.5), ("kor_webtext.bin", 2.0), ("kor_synth.bin", 2.0), ] ``` 가중치 합 18.5 기준 실효 비중: | 영역 | 비중 | |------|------| | 수학 (finemath + open-web-math) | 37.8% | | 한국어 (webtext + synth) | 21.6% | | 영어 웹·합성 (fineweb-edu + cosmopedia) | 21.6% | | 코드 (opc) | 13.5% | | phase15 혼합 | 5.4% | --- ## 6. 학습 | 항목 | 값 | |------|-----| | **하드웨어** | **NVIDIA B200 × 16** (2-node FSDP) | | **전체 학습 기간** | **2026-05-30 → 2026-07-16, 약 46일** | | **최종 단계** | 2026-06-15 → 07-16, **30일 11시간**, B200 16장, **약 11,700 B200-시간** | | **처리량** (최종 단계) | 약 32,000 tok/s | | 총 스텝 | 162,000 | | 총 토큰 | **144.2B** | | 옵티마이저 | AdamW, β=(0.9, 0.95), eps=1e-8 | | LR | cosine, peak 5e-5 → min 5e-6 | | weight decay | 0.1 (트랜스포머 층) / 0.0 (임베딩·norm) | | 임베딩 LR 배수 | 0.1 | | Layer-wise decay | 0.97 | | grad clip | 1.0 | | 시퀀스 | 4096 | | 후속 | annealing (본 체크포인트는 annealing 완료본) | 학습 코드(`launcher_v2b_multi.py`, `launcher_v2b_multi.py`, `run_s1.sh`, `run_s2.sh`)와 **완주 로그 전문**을 함께 공개합니다. --- ## 7. 평가 **lm-evaluation-harness 0.4.11**, 0-shot, n=600, `batch_size=1`. ### 7.1 영어 | 과제 | acc | acc_norm | |------|-----|----------| | **SciQ** | **73.7** | 63.0 | | **PIQA** | **66.3** | 65.8 | | BoolQ | 54.3 | — | | **ARC-Easy** | **52.5** | 48.7 | | WinoGrande | 51.8 | — | | HellaSwag | 37.2 | 41.0 | | OpenBookQA | 20.0 | 32.6 | | ARC-Challenge | 22.2 | 25.8 | ### 7.2 한국어 (KoBEST) | 과제 | 점수 | |------|------| | **HellaSwag** (acc_norm) | **44.6 ±2.2** | | **COPA** | **57.2 ±2.0** | | **SentiNeg** | **55.7 ±2.5** | | WiC | 48.8 ±2.0 | | BoolQ | 47.8 ±2.0 | ### 7.3 언어 모델링 | 입력 | perplexity | |------|-----------| | 자연스러운 한국어 문장 | **5.4** | | 같은 문장의 어순을 뒤섞은 것 | 41.3 | | 무작위 토큰 | 2233.4 | 한국어 문법·의미 구조가 정상적으로 학습되었음을 보여줍니다. --- ## 8. 사용법 ```python import torch from transformers import AutoTokenizer, AutoModelForCausalLM MODEL = "FINAL-Bench/Aether-7B-5Attn" tok = AutoTokenizer.from_pretrained(MODEL) model = AutoModelForCausalLM.from_pretrained( MODEL, trust_remote_code=True, torch_dtype=torch.bfloat16, device_map="cuda" ) ids = tok("인공지능이란", return_tensors="pt").to("cuda") out = model.generate(**ids, max_new_tokens=128, do_sample=True, temperature=0.8, top_p=0.9, repetition_penalty=1.1) print(tok.decode(out[0], skip_special_tokens=True)) ``` ### 사용 > ⚠️ **batch_size=1 로 사용하세요.** 본 모델의 일부 어텐션(NSA 계열)은 padding mask 를 사용하지 않으므로, 여러 시퀀스를 padding 하여 배치로 넣으면 결과가 조용히 오염될 수 있습니다. 한 번에 하나씩(batch_size=1) 추론하십시오. 시 참고 - **베이스 모델입니다.** 지시(instruction) 튜닝이 되어 있지 않습니다. instruct 버전은 준비 중입니다. - **`do_sample=True` 를 사용하십시오.** 베이스 모델 특성상 greedy 디코딩은 반복에 빠집니다. - **`batch_size=1` 또는 패딩 없는 입력을 사용하십시오.** 커스텀 어텐션 구현 특성상 좌패딩 배치에서는 출력이 달라질 수 있습니다. - **서빙은 HF `transformers`** 로 하십시오. 커스텀 아키텍처이므로 vLLM은 아직 지원하지 않습니다. - **안전성 정렬을 하지 않았습니다.** RLHF·안전성 튜닝이 적용되지 않은 연구용 베이스 모델입니다. 서비스에 그대로 사용하지 마십시오. --- ## 9. 공개 범위 | 항목 | 상태 | |------|------| | 가중치 (annealing 완료 베이스) | ✅ 본 저장소 | | 아키텍처 소스 전체 | ✅ `aether_pkg/` | | 학습 데이터 레시피 (소스·config·토큰수·배합비·토크나이저·EOS) | ✅ §5 | | 토큰화 스크립트 | ✅ `tokenize_one.py` | | 학습 코드 | ✅ `launcher_v2b_multi.py`, `launcher_v2b_multi.py`, `run_s1.sh`, `run_s2.sh` | | 학습 하이퍼파라미터 전체 | ✅ §6 | | 학습 로그 전문 | ✅ `logs/` | | 평가 코드 | ✅ `eval/lmeval_run.py` | | 중간 체크포인트 | ✅ step 110k / 115k / 162k | | 논문 | 준비 중 | **라이선스: Apache-2.0** (가중치·코드). 학습 데이터는 각 원 저장소의 라이선스를 따릅니다 (§5.1). --- ## 10. 인용 ```bibtex @misc{aether7b5attn2026, title = {Aether-7B-5Attn: A Heterogeneous-Attention Mixture-of-Experts Language Model}, author = {VIDRAFT}, year = {2026}, url = {https://huggingface.co/FINAL-Bench/Aether-7B-5Attn} } ``` --- ## 11. 문의 **주식회사 비드래프트 (VIDRAFT)** · arxivgpt@gmail.com