Hugging Face mascot with colorful concentric waves on a blue background.
Reflection의 Beam이 Hugging Face에 출시되었습니다! 이는 새로운 미국 연구소인 Reflection에서 나온 첫 번째 모델이며, 오픈 소스입니다! 이 모델은 전문가 혼합 모델(MoEs)로 501B 매개변수(토큰당 23B 활성)를 가지고 있으며, 텍스트 입력을 지원하고, 컨텍스트 창이 1M 토큰에 달하며, Apache 2.0 라이선스 하에 출시되었습니다.
Beam은 코딩 및 에이전트 기반(agentic) 사용 사례에 중점을 두고 있습니다. 이 모델은 자체 하드웨어, 인프라 또는 클라우드에서 최첨단 규모의 모델을 보유하고 싶고, 이를 자신만의 사용 사례에 맞게 커스터마이징하려는 팀을 위한 것입니다. Beam은 모델로부터 최고의 성능을 제공하는 전용 오픈 소스 Rust 기반 하네스를 함께 제공합니다.
Beam은 transformers 네이티브 구현과 더불어 vLLM 및 SGLang 같은 다운스트림 라이브러리를 갖추고 있습니다. 저희는 Reflection 팀과 협력하여 이 모델로 사용자의 필요에 맞게 구축할 수 있도록 추론(inference), 지도 미세 조정(SFT, supervised fine tuning), 그리고 강화 학습(RL, reinforcement learning) 레시피를 제공합니다. transformers에서 즉시 사용 가능한 지원은 물론, SGLang 및 vLLM을 통해 이 게시물에서는 모델 실행 방법, 후속 훈련 방법, 그리고 이를 활용하여 구축한 내용을 보여드립니다.
요약 (TL;DR)
-
토큰당 23B 활성 매개변수를 가진 501B 매개변수 MoE LLM. 52개의 레이어, MoE 레이어당 256개의 전문가(experts), 토큰당 8개가 라우팅됩니다.
-
컨텍스트 창이 1M 토큰인 텍스트 입력/출력 지원.
-
체크포인트 형식: BF16, FP8, 그리고 NVFP4.
-
턴을 거치며 컨텍스트 내에 유지될 수 있는 추론 기능(preserve_thinking), 전용 문법을 사용한 도구 호출(tool calling). 이 모델은 다섯 가지 추론 값(
-
Spaces에서 Beam 모델을 사용하는 데모를 만들 수 있습니다.
-
좋아하는 하드웨어에 맞춰 양자화(quantize)할 수 있습니다.
-
선호하는 문제에 대한 합성 데이터셋을 생성할 수 있습니다.
-
Beam과 함께 또는 Beam을 위해 강화학습(RL) 환경을 구축할 수 있습니다.
-
Beam의 벤치마크를 수행하고 결과를 공유할 수 있습니다.
-
저희에게 놀라움을 선사할 수도 있습니다!
Beam을 사용하여 무언가를 만들었다면, $10,000를 받을 기회를 위해 허브(Hub)에 공유하세요. 할 일은 스페이스(space), 모델 또는 데이터셋 레포지토리(repo)를 구축하여 해당 모델의 레포 페이지에 공유하는 것뿐입니다. 저희가 모든 링크를 수집하고 최고의 것을 선정하여 귀하의 Hub 계정에 크레딧을 지급할 것입니다.
Beam은 장문 컨텍스트(1M 컨텍스트 길이) 추론 및 에이전트 작업(agentic work)을 위해 구축된 텍스트 전용 모델입니다. 이는 희소 MoE(Mixture-of-Experts) 모델로, 각 토큰이 네트워크의 작은 부분에 의해 계산되므로, 대형 모델의 용량을 유지하면서 훨씬 작은 모델의 속도로 실행됩니다.
Beam architecture: three dense layers followed by 49 mixture-of-experts layers, with hybrid attention and weighted residual connections.
디코더는 히든 사이즈가 5,120인 52개의 레이어로 구성되어 있습니다. 대부분의 레이어는 이전 512개 토큰에 대한 슬라이딩 윈도우 어텐션(sliding-window attention)을 사용하며, 여섯 번째 레이어마다 그리고 마지막 레이어는 전체 컨텍스트에 주의를 기울입니다. 이를 통해 43개의 슬라이딩 윈도우 레이어와 9개의 글로벌 레이어가 제공됩니다.
Attention block with grouped-query attention, RoPE or scalable-softmax query scaling, and a learned sigmoid gate.
어텐션 블록 내부 (두 레이어 유형 모두)
두 가지 유형의 레이어는 위치를 다르게 처리합니다. 슬라이딩 윈도우 레이어는 상대적 위치가 짧은 창(window) 내에서 가장 중요하기 때문에 RoPE를 사용합니다. 글로벌 레이어는 위치 인코딩을 사용하지 않습니다. 대신, 각 쿼리는 보이는 토큰 수에 따라 느리게 증가하는 스케일러와 곱해집니다: (1 + (pos + 1) / 2048) ** 0.1. 이는 온도(temperature) 역할을 합니다. 컨텍스트가 길어짐에 따라 소프트맥스(softmax)가 평평해지는 대신 정밀도를 유지합니다. 구현에서는 이를 스케일러-소프트맥스 쿼리 스케일링(scalable-softmax query scaling)이라고 부릅니다.
어텐션은 쿼리 헤드 48개와 키-값(key-value) 헤드 8개를 가진 그룹화된 쿼리 어텐션(grouped-query attention)을 사용하며, 쿼리와 키에는 RMSNorm이 적용됩니다. 레이어 입력에서 계산된 학습 가능한 시그모이드 게이트(learned sigmoid gate)가 출력 투영(output projection) 전에 모든 헤드의 모든 채널을 스케일링합니다.
첫 3개 레이어는 밀집형(dense) SwiGLU MLP를 사용합니다. 나머지 49개 레이어는 이를 256개의 전문가(expert)로 구성된 Mixture-of-Experts (MoE) 블록으로 대체하며, 각 전문가는 중간 크기 2,560의 SwiGLU MLP이며 약 39M 개의 파라미터를 가집니다. 이 전문가들이 모델 파라미터의 98.4%를 차지합니다.
라우터는 DeepSeek-V3의 그룹 제한 방식(group-limited scheme)을 따릅니다. 이는 모든 256개 전문가에 시그모이드(sigmoid)를 적용하여 점수를 매기고, 이를 32개씩 8개의 그룹으로 나눕니다. 이후 각 그룹의 상위 두 점수 합계로 순위를 매겨 가장 좋은 4개 그룹을 유지한 다음, 그 안에서 상위 8개 전문가를 선택합니다. Beam은 DeepSeek-V3와 동일한 그룹 크기를 사용하지만 공유된 전문가(shared expert)는 없습니다. 전문가 출력은 정규화된 라우터 가중치와 결합되고 2.5로 스케일링됩니다.
Beam router scores 256 experts and selects groups before routing each token to eight experts.
토큰당 오직 8개의 전문가만 실행되므로, 이 모델은 각 토큰을 약 23B 개의 파라미터로 계산합니다. 모든 256개 전문가는 메모리에 유지되어야 하므로 배포에는 501B 모델의 메모리가 필요하지만, 23B 모델의 속도로 작동합니다. BF16 체크포인트는 safetensors 형식으로 약 1TB입니다. NVFP4 체크포인트는 NVIDIA Blackwell GPU를 위해 대부분의 파라미터를 4비트 정밀도(precision)로 저장하며, 정확도를 위해 일부 파라미터는 BF16으로 유지됩니다. 또한 허브에는 Hopper 및 Ampere 시리즈 칩에 이상적인 FP8 체크포인트도 있습니다.
직접 Beam을 배포하려면 아래의 vLLM 또는 SGLang 레시피를 확인하십시오.
잔차 연결(residual connections)이 가장 독특한 부분입니다. 표준 트랜스포머는 각 서브 레이어 출력에 가중치 1을 곱하여 스트림에 추가하므로, 깊이가 깊어질수록 스트림도 커집니다.
Standard transformer residual stream adds each sublayer output with weight one.
Beam은 입력 임베딩을 단계 1로 계산합니다. 단계 k에서는 서브 레이어 출력에 가중치 1/sqrt(k)를 곱하여 추가하고, 기존 스트림에는 가중치 sqrt((k-1)/k)를 곱하여 유지합니다. 두 가중치의 제곱 합은 1이 되므로, 스트림은 첫 번째 레이어부터 마지막까지 일정한 스케일을 유지합니다. 모든 104번의 덧셈 후에, 모든 서브 레이어 출력과 입력 임베딩은 최종 은닉 상태(final hidden state)에서 동일한 가중치를 갖게 됩니다.
Beam residual stream uses depth-dependent weights to keep the accumulated hidden state at a constant scale.
모든 서브 레이어(sublayer)는 전후에 정규화(normalized)되며, 최종 로짓(logits)은 ±30의 tanh 소프트캡(softcap)을 거쳐 FP32로 계산됩니다. 구현에서는 다음 요소들에서 FP32를 사용하여 계산하는 부분을 고정했습니다: 라우터(router), SwiGLU 곱셈 결과(product), 정규화(norms), RoPE, 쿼리 스케일링(query scaling), 그리고 소프트캡입니다.
하이브리드 어텐션(Hybrid attention)은 긴 컨텍스트(long contexts)에 효과적입니다. 각 레이어는 토큰당 2 x 8 KV 헤드 x 128 차원 = 2,048개의 값을 캐시합니다. 만약 모든 52개 레이어가 모든 토큰을 유지한다면, 캐시는 토큰당 208 KiB씩 증가할 것입니다. 오직 9개의 글로벌 레이어(global layers)만이 전체 시퀀스(sequence)를 유지합니다. 나머지 43개의 슬라이딩 윈도우 레이어(sliding-window layers)는 각각 고정된 512 토큰 창을 보유하며 더 이상 증가하지 않습니다. 따라서 캐시는 토큰당 36 KiB씩 증가하여, 순수 계산 속도의 약 6분의 1 수준입니다.
| Context | If all 52 layers were global | Beam |
|---|
| 32K tokens | 6.5 GiB | 1.2 GiB |
| ... | | |
| 이 수치들은 트랜스포머의 동적 캐시(dynamic cache)를 사용한, 시퀀스당 BF16 기준 값입니다. | | |
다음은 Reflection 팀에서 제공한 다양한 정밀도 수준별 벤치마크 결과입니다.
| Beam (BF16) | Beam (FP8) | Beam (NVFP4) |
|---|
| Agentic Coding / Terminal | | |
| DeepSWE v1.1 | 43.3% | 43.0% |
| SWE Bench Pro v2-Hard | 76.5% | 78.4% |
| ... | Reasoning | |
| AIME 2026 | 97.7% | 98.0% |
| HLE (no tools) | 36.0% | 36.0% |
| ... | Tool Calling / Search | |
| AutomationBench - public split only | 39.3 | 38.2 |
| MCP Atlas | 80.8% | 81.5% |
| ... | General Capabilities | |
| AA-LCR | 78.2% | 79.4% |
| LongBench v2 | 67.5% | 67.6% |
| ... | | |
모델을 서비스하는 가장 실용적인 방법은 BF16 체크포인트의 품질 대부분을 유지하는 NVFP4 체크포인트를 사용하는 것입니다. NVFP4는 일부 가중치(weights)를 4비트로 저장하여, BF16 기준 501B 파라미터 크기를 1TB에서 약 280GB로 줄입니다. Blackwell GPU는 NVFP4를 네이티브하게 실행할 수 있지만, H200과 같이 Blackwell보다 오래된 GPU는 할 수 없습니다. FP8 체크포인트는 Blackwell보다 오래된 GPU에 적합합니다.
B200 하나는 180 GB의 HBM3e를 가지고 있으므로, 두 개(360 GB)로 Beam 가중치를 담을 수 있지만 활성화 값(activations)과 KV 캐시(KV cache)를 위한 공간은 거의 남지 않습니다. 네 개의 B200(720 GB)을 계획하면, 긴 컨텍스트와 동시 요청에 충분한 공간이 남습니다. 또한 전체 8xB200 노드 또는 각각 288 GB인 두 개의 B300, 심지어 8xRTX Pro 6000에서도 서비스할 수 있습니다. 만약 Blackwell 하드웨어가 없다면, Reflection을 테스트하기 위해 추론 제공업체(Inference Providers)(서버리스)를 사용하십시오.
Beam은 transformers, SGLang 및 vLLM에서 Day-0 지원을 제공합니다.
최신 버전의 transformers를 설치하십시오.
pip install -U "transformers>=5.20.1"
Beam을 실행하는 가장 쉬운 방법은 텍스트 생성 파이프라인(text-generation pipeline)입니다:
from transformers import pipeline
pipe = pipeline(
"text-generation", model="reflection/Beam-1.0-501B-A23B", device_map="auto"
...
이 파이프라인은 전체 채팅 내용을 반환합니다. 마지막 메시지는 응답 템플릿(response template)에 의해 이미 구문 분석된 Beam의 답변입니다.
한 단계 더 깊이 들어가려면, AutoModelForCausalLM과 AutoTokenizer를 사용하십시오.
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "reflection/Beam-1.0-501B-A23B"
tokenizer = AutoTokenizer.from_pretrained(model_id)
...
messages = [
{"role": "system", "content": "You should only answer with a number."},
{"role": "user", "content": "What is 17 * 23?"},
...
]
Beam의 토크나이저는 응답 템플릿을 가지고 있습니다. parse_response는 이를 읽어 원시 출력을 메시지 딕셔너리(message dict)로 변환하며, 추론 과정(reasoning), 답변(answer), 그리고 모든 도구 호출(tool calls)을 개별 필드로 분리합니다. 이렇게 하면 일반적으로 사용되는 추론과 답변, 도구 호출로부터의 구분을 위한 정규 표현식(regex)이 필요하지 않습니다. 또한 규칙은 토크나이저와 함께 제공되므로, 구문 분석된 구조는 Beam이 생성하도록 훈련된 것과 일치합니다. 채팅 템플릿(chat template)은 어시스턴트 턴(assistant turn)의 일부를 미리 작성할 수 있으며, 파서가 이를 볼 필요가 있습니다.
전체 도구 호출 예제
def get_weather(city: str, unit: str = "celsius"):
"""
Get the current weather for a city.
...
tools를 parse_response에 전달하십시오.
또한 Beam은 도구 호출(tool-call) 인수를 자체적인 XML 스타일 문법으로 인라인(inline)에 작성합니다. 따라서 단순한 7이 숫자일 수도 있고 문자열일 수도 있습니다. 도구 스키마를 사용하면 파서가 각 인수를 선언된 타입으로 캐스팅(casts)합니다.
Beam의 설정은 전문가 병렬(expert-parallel) 계획을 정의합니다. 전문가 병렬 방식은 각 전문가를 하나의 장치에 배치합니다. 어텐션(Attention), 밀집 계층(dense layers), 임베딩(embeddings), 그리고 LM 헤드(LM head)는 모든 장치에 복제됩니다. 이는 8B 파라미터, 즉 BF16에서 16 GB에 해당합니다. DistributedConfig를 사용하여 모델을 로드합니다:
import os
from transformers import AutoModelForCausalLM
from transformers.distributed import DistributedConfig
...
이 스크립트를 torchrun을 사용하여 16개의 H200 GPU에 걸쳐 실행합니다. 그러면 각 장치는 78 GB의 가중치(weights)를 보유하게 됩니다. 만약 8개 GPU를 사용한다면 각각 139 GB를 차지하여 141 GB H200에는 공간이 남지 않습니다. 장치의 개수는 전문가의 개수, 즉 256을 나누어야 합니다.
Beam은 vLLM에서 Day-0 지원을 제공합니다. 아래 명령어는 16개 GPU(8x H200 노드 2개)에 걸쳐 텐서 병렬성(tensor parallelism)으로 BF16 체크포인트를 서비스하며 OpenAI와 호환되는 API를 노출합니다:
vllm serve reflection/Beam-1.0-501B-A23B --tensor-parallel-size 16 --served-model-name beam
더 빠른 생성을 위해 DFlash2 추측 디코딩(speculative decoding)을 추가합니다. 작은 드래프터 모델(drafter model)이 최대 15개의 토큰을 미리 제안하고, Beam은 이 모든 것을 단일 순전파(forward pass)에서 확인하므로 각 단계에서 여러 개의 토큰을 수용할 수 있습니다. 비용은 드래프터를 위한 약간의 추가 메모리입니다:
vllm serve reflection/Beam-1.0-501B-A23B \
--tensor-parallel-size 16 \
--speculative-config '{ "method": "dflash", "model": "reflection/dflash2-drafter-preview", "num_speculative_tokens": 15 }'
두 명령어 모두 OpenAI와 호환되는 서버를 시작하므로 모든 OpenAI 클라이언트를 http://localhost:8000/v1로 지정할 수 있습니다. 추가적인 서비스 구성에 대해서는 vLLM용으로 제안된 Beam 레시피를 참조하십시오.