Transformers documentation
DeepSeek-V4
이 모델은 2026-05-02에 Hugging Face Transformers에 기여되었습니다.
DeepSeek-V4
DeepSeek-V4는 DeepSeek의 차세대 MoE 언어 모델(논문)입니다. 이 아키텍처는 DeepSeek-V3의 Multi-head Latent Attention(MLA)을 로컬 + 장거리 하이브리드 설계로 대체하고, residual connections을 Manifold-Constrained Hyper-Connections(mHC)로 교체하며, 처음 몇 개의 MoE 레이어를 정적 token-id → expert-id 해시 테이블로 부트스트랩합니다.
이 구현은 DeepSeek-V4-Flash, DeepSeek-V4-Pro 및 해당 -Base 사전 학습 모델을 대상으로 합니다. 네 모델 모두 동일한 아키텍처를 공유하며, 폭 / 깊이 / 전문가 수와 가중치에서만 차이가 있습니다.
use_kernels=True를 from_pretrained()에 설정하여 Hub의 최적화 커널로 지원되는 레이어를 대체합니다. 자세한 내용은 커널 로딩을 참고하세요.
아키텍처(논문 §2)
하이브리드 어텐션(§2.3)
각 decoder block은 config.layer_types[i]에 의해 분기되는 세 가지 attention 유형 중 하나입니다:
- 슬라이딩 윈도우 전체 어텐션 (
"sliding_attention"):sliding_window토큰의 로컬 윈도우만 사용하고, 장거리 분기는 없습니다. V3의 “Full Attention” 스타일에 부트스트랩 레이어가 해당합니다. - Compressed Sparse Attention(
"compressed_sparse_attention", CSA — 논문 §2.3.1): 겹치는 윈도우를 가진 저압축 풀(compress_rate_csa, 기본값m=4)과 쿼리를 풀과 비교하여 점수를 매긴 후, 각 쿼리마다 상위index_topk블록을 수집하여 코어 어텐션에 전달하기 전에 처리하는 Lightning Indexer(식 13–17)로 구성됩니다. - 고도로 압축된 어텐션(
"heavily_compressed_attention", HCA — 논문 §2.3.2): 겹치지 않는 윈도우를 사용하는 고압축 풀링(compress_rate_hca, 기본값m'=128). 인덱서가 없으며, 모든 풀링된 항목이 어텐션에 기여합니다.
세 가지 유형 모두 동일한 백본을 공유합니다:
- 공유 K=V 멀티-쿼리 어텐션:
num_key_value_heads = 1;kv_proj가 단일 KV 헤드를 생성하고 동일한 텐서가 키와 값으로 모두 읽힙니다. - 각 헤드의 뒤쪽
qk_rope_head_dim = head_dim * partial_rotary_factor채널에 Partial RoPE(interleaved-pair, 논문 §2.3.3 “Partial Rotary Positional Embedding”)를 적용합니다. 동일한 회전은 attention 출력의 rope 슬라이스에 위치-i로 적용되어(eq. 26), 각 KV 항목의 기여도가 query에 대한 상대 거리의 함수로 유지됩니다. - 헤드별 학습 가능한 어텐션 싱크 (식 27).
- 그룹화된 저랭크 출력 투영(§2.3.1 “Grouped Output Projection”):
o_groups헤드 그룹 → 그룹당o_lora_rank→hidden_size.DeepseekV4GroupedLinear(o_a_proj)에 이어o_b_proj로 계산됩니다. 표현력을 유지하면서 넓은 어텐션 출력의 토큰당 비용을 줄입니다. - 크기
sliding_window의 공유 슬라이딩 윈도우 K=V 브랜치("Additional Branch of Sliding Window Attention", §2.3.1)는 로컬의 세밀한 의존성을 보존합니다. 장거리 압축기의 출력은 이 브랜치의 KV와 연결된 후 핵심 어텐션에 사용됩니다.
Manifold-Constrained Hyper-Connections (§2.2)
Residual connections은 mHC(Xie et al., 2026)로 대체됩니다: 각 블록 전체에서 hc_mult개의 병렬 residual stream이 [B, S, hc_mult, D] 형태로 유지됩니다. DeepseekV4HyperConnection 모듈 두 개, 즉 attn_hc와 ffn_hc가 (pre, post, comb) 3원조를 통해 attention / MLP 서브레이어 주위로 stream을 혼합합니다. comb 행렬은 매니폴드에서 hc_sinkhorn_iters Sinkhorn–Knopp 반복을 통해 생성되는 doubly-stochastic projection으로, 깊은 스택에 걸쳐 신호 전파가 비확장(non-expansive)이 되도록 합니다. 마지막 DeepseekV4HyperHead가 모델 norm 전에 hc_mult개의 stream을 단일 시퀀스로 축소합니다.
MoE 스케줄(§2.1)
라우팅은 config.mlp_layer_types를 통해 레이어별로 설정되며, 값은 {"hash_moe", "moe"} 중 하나입니다:
"hash_moe": expert indices는 V4 checkpoint에서 채워진 동결된tid2eid[input_ids]조회에서 가져옵니다. 학습된 게이트weight는 여전히 선택된 expert를 가중하는 per-expert scores를 생성하며, 어떤 expert를 선택하는지만 정적입니다. 처음 몇 개의 bootstrap layer(기본값 3, legacynum_hash_layers로 재정의 가능)에 사용됩니다."moe": 표준 top-k 라우팅 MoE입니다. 전문가 어피니티는 V3의 Sigmoid 대신 Sqrt(Softplus(·))를 사용합니다(“어피니티 점수를 계산하는 활성화 함수를 Sigmoid(·)에서 Sqrt(Softplus(·))로 변경합니다”, 논문 §2.1) 그리고 V3의n_group/topk_group제약은 제거됩니다. 보조 손실 없는 전략(DeepSeek의noaux_tc)은e_score_correction_bias버퍼를 통해 유지되며, 이 버퍼는 그라디언트를 흐르지 않게 하면서 top-k argmax에 편향을 부여합니다.
Routed experts는 표준 Mixtral의 [num_experts, 2 * moe_intermediate_size, hidden_size] expert weight layout 위에 clamped SwiGLU (gate.clamp(max=swiglu_limit), up.clamp(min=-swiglu_limit, max=swiglu_limit),
그 다음 act_fn(gate) * up)를 사용합니다. 단일 shared expert(moe_intermediate_size 폭의 일반 SwiGLU MLP)는 모든 token에 대해 병렬로 실행됩니다.
Attention mask 레이아웃
각 DeepseekV4Attention 레이어는 압축기(compressor)가 반환하는 block_bias를 사용하여 키 축을 따라 표준 슬라이딩 윈도우 카우zal 마스크를 확장한 뒤, 연결된 마스크를 eager_attention_forward에 전달합니다. 슬라이딩 섹션(왼쪽, [S, S])은 모든 레이어 유형에서 동일하며, 압축기 섹션(오른쪽)은 레이어 유형에 따라 달라지며 V4에서 도입된 실제 “신규” 부분입니다.
아래 다이어그램은 16-token 입력에 대해 매우 작은 설정(sliding_window=8, CSA m=4, HCA m'=8, index_topk=2)으로 생성되어 레이어 유형별 전체 마스크가 화면에 들어오도록 했습니다. 녹색 = 슬라이딩 섹션의 query/key 대각선, 어두운 색 = 가시적인 표준 KV 위치, 밝은 색 = 마스크 처리됨, 앰버 = query가 attend할 수 있는 compressor / indexer 슬롯. 점선 너머의 열은 compressor가 cat([sliding_causal_mask, block_bias], dim=-1)을 통해 추가합니다.
슬라이딩 전용 레이어("sliding_attention"). 압축기나 오른쪽 패딩이 없으며, 마스크는 [S, S] 크기의 일반 슬라이딩 윈도우 카우zal 마스크입니다(윈도우 = 8). i ≥ window인 경우 왼쪽 아래 삼각형이 잘려 나가 로컬 전용 어텐션 패턴이 복원됩니다.
CSA 레이어("compressed_sparse_attention"). 압축기는 쿼리별 수집된 출력을 [B, 1, S·k, D]로 평탄화하고, 마스크를 S·k열만큼 오른쪽으로 패딩합니다. 쿼리 t의 경우, [S + t·k, S + (t+1)·k)열의 k개 슬롯에만 인덱서의 선택 결과가 들어 있으며, 나머지 압축기 열은 모두 -inf입니다. 첫 번째 윈도우가 닫히기 전의 쿼리(t < m − 1)에는 아무것도 할당되지 않으며, 인덱서의 -1 센티널 값이 그대로 마스크로 전파됩니다. t가 커질수록 더 많은 압축된 항목이 준비되고, 인덱서는 k개 슬롯을 모두 채울 수 있습니다.
HCA 레이어("heavily_compressed_attention"). 인덱서가 없으며, 캐시된 압축 항목은 모두 잠재적으로 가시적입니다. T_total = entry_count["compressor"]개의 열로 오른쪽 패딩됩니다. 쿼리 t는 소스 윈도우가 닫힌 후에만, 즉 w < (t + 1) // m일 때에만 항목 w를 볼 수 있습니다. 여기서 m=8이므로, 항목 0(위치 0..7을 커버)과 1(8..15를 커버)은 각각 t ≥ 7 및 t ≥ 15에서 비로소 가시화됩니다.
이 다이어그램은 다음을 통해 끝에서 끝까지 재현할 수 있습니다:
python docs/source/en/imgs/deepseek_v4/visualize_attention_masks.py \
--svg docs/source/en/imgs/deepseek_v4스크립트는 이 작은 config에 대해 forward pass를 실행하고, 각 attention layer를 래핑하여 cat([attention_mask, block_bias]) 이후의 정확한 mask를 캡처합니다. 또한 CSA의 [S, S·k] flat-slot mask를 [S, T_entries] entry-visibility view로 다시 매핑합니다(각 C_w 열은 gather slot이 아닌 압축된 entry가 됩니다). 그리고 위에서 언급한 세 개의 SVG를 작성합니다. 또한 빠른 터미널 검사를 위해 stdout에 ANSI grid를 출력하고, warm-up sentinel과 pick 선택이 감사(audit) 가능하도록 indexer의 per-query top-k 선택 결과를 덤프합니다.
캐시 레이어
각 non-sliding attention 블록은 forward 호출 간에 compressor / indexer 상태를 전달해야 합니다. V4에는 LAYER_TYPE_CACHE_MAPPING에 자동 등록되는 두 가지 cache layer 유형이 포함되어 있습니다:
DeepseekV4HCACache: 슬라이딩 윈도우 K=V + HCA 압축기 버퍼 / 풀 / 카운트 (오버랩 없음, 인덱서 없음).DeepseekV4CSACache: 슬라이딩 윈도우 K=V + CSA 압축기(오버랩 상태 포함) + 병렬 인덱서index_head_dim의 버퍼 / 풀 / 카운트 / 오버랩
DynamicCache(config=…)은 config.layer_types[i]별로 올바른 캐시 레이어를 생성합니다.
DeepseekV4Config
class transformers.DeepseekV4Config
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonevocab_size: int = 129280hidden_size: int = 4096moe_intermediate_size: int = 2048num_hidden_layers: int = 43num_attention_heads: int = 64num_key_value_heads: int = 1head_dim: int = 512q_lora_rank: int = 1024num_experts_per_tok: int = 6n_routed_experts: int = 256n_shared_experts: int = 1scoring_func: str = 'sqrtsoftplus'norm_topk_prob: bool = Truerouted_scaling_factor: float = 1.5max_position_embeddings: int = 1048576rope_theta: float | int = 10000.0layer_types: list[str] | None = Nonecompress_rates: dict | None = Nonecompress_rope_theta: float | int = 160000.0hc_mult: int = 4hc_sinkhorn_iters: int = 20hc_eps: float = 1e-06mlp_layer_types: list[str] | None = Noneswiglu_limit: float = 10.0sliding_window: int = 128o_groups: int = 8o_lora_rank: int = 1024index_n_heads: int = 64index_head_dim: int = 128index_topk: int = 512num_nextn_predict_layers: int = 1output_router_logits: bool = Falserouter_aux_loss_coef: float = 0.001router_jitter_noise: float = 0.0hidden_act: str = 'silu'initializer_range: float = 0.02rms_norm_eps: float = 1e-06use_cache: bool = Truepad_token_id: int | None = Nonebos_token_id: int | None = 0eos_token_id: int | list[int] | None = 1tie_word_embeddings: bool = Falserope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = Nonepartial_rotary_factor: float | None = Noneattention_bias: bool = Falsemlp_bias: bool = Falseattention_dropout: float = 0.0 )
매개변수
- vocab_size (
int, 선택 사항, 기본값129280) — 모델의 어휘 크기입니다.input_ids로 표현할 수 있는 서로 다른 토큰의 수를 정의합니다. - hidden_size (
int, 선택 사항, 기본값4096) — 숨겨진 표현의 차원입니다. - moe_intermediate_size (
int, 선택 사항, 기본값2048) — 라우팅된 전문가 MLP의 중간 크기입니다. - num_hidden_layers (
int, 선택 사항, 기본값43) — Transformer decoder의 숨겨진 레이어 수입니다. - num_attention_heads (
int, 선택 사항, 기본값64) — Transformer decoder의 각 attention layer에 사용할 attention head의 수입니다. - num_key_value_heads (
int, 선택 사항, 기본값1) — Grouped Query Attention 구현에 사용할 key_value 헤드 수입니다.num_key_value_heads=num_attention_heads이면 모델은 Multi Head Attention(MHA)을 사용하고,num_key_value_heads=1이면 Multi Query Attention(MQA)을 사용하며, 그 외에는 GQA를 사용합니다. 멀티 헤드 체크포인트를 GQA 체크포인트로 변환할 때, 각 그룹의 key 및 value 헤드는 해당 그룹 내 모든 원래 헤드를 평균 풀링(meanpooling)하여 구성해야 합니다. 자세한 내용은 이 논문을 참고하세요. 지정하지 않으면num_attention_heads가 기본값으로 사용됩니다. - head_dim (
int, 선택 사항, 기본값512) — Attention head의 차원입니다. None인 경우 hidden_size // num_attention_heads 값이 기본값으로 사용됩니다. - q_lora_rank (
int, 선택 사항, 기본값1024) — 쿼리 투영에 사용되는 LoRA 행렬의 랭크입니다. - num_experts_per_tok (
int, 선택 사항, 기본값6) — 각 토큰을 라우팅할 전문가의 수입니다. 이는 토큰 선택 라우팅의 top-k 값입니다. - n_routed_experts (
int, 선택 사항, 기본값256) — 라우팅된 전문가의 수입니다. - n_shared_experts (
int, 선택 사항, 기본값1) — 공유 전문가의 수입니다. - scoring_func (
str, 선택 사항, 기본값sqrtsoftplus) — 라우터 활성화 함수 —sqrtsoftplus,softmax또는sigmoid. - norm_topk_prob (
bool, 선택 사항, 기본값True) — 라우팅된 전문가의 가중치를 정규화할지 여부입니다. - routed_scaling_factor (
float, 선택 사항, 기본값1.5) — 라우팅된 전문가에 대한 스케일링 팩터입니다. - max_position_embeddings (
int, 선택 사항, 기본값1048576) — 이 모델이 사용될 수 있는 최대 시퀀스 길이입니다. - rope_theta (
Union[float, int], 선택 사항, 기본값10000.0) — 메인 self-attention rotary의 RoPE base입니다. - layer_types (
list[str], 선택) —{"compressed_sparse_attention", "heavily_compressed_attention"}의 값을 사용하여 레이어별 attention 스케줄을 정의합니다. V4-Pro 기본값: 2× HCA bootstrap + CSA / HCA 교차 배치. - compress_rates (
dict[str, int]) — 레이어 유형별 압축률. 기본값은{"compressed_sparse_attention": 4, "heavily_compressed_attention": 128}(CSA의 m=4, HCA의 m’=128, 논문 §2.3.1 / §2.3.2). BC: 최상위 kwarg로compress_rate_csa/compress_rate_hca를 포함하는 설정은__post_init__시점에 통합됩니다. - compress_rope_theta (
Union[float, int], 선택 사항, 기본값160000.0) — 압축된 브랜치에 사용되는 RoPE base입니다(YaRN의 경우rope_scaling과 함께 사용). - hc_mult (
int, 선택 사항, 기본값4) — Manifold-Constrained Hyper-Connection(mHC) 확장 계수 n_hc(항상 활성화됨; 2.2절). - hc_sinkhorn_iters (
int, 선택 사항, 기본값20) — mHC 잔차 매핑을 이중 확률 행렬로 투영할 때 사용할 Sinkhorn-Knopp 반복 횟수 t_max입니다. - hc_eps (
float, 선택 사항, 기본값1e-06) — Sinkhorn-Knopp 정규화에 사용되는 수치 하한값입니다. - mlp_layer_types (
list[str], 선택 사항) —{"hash_moe", "moe"}값으로 구성된 레이어별 MoE 스케줄입니다.hash_moe는 동결된tid2eid[input_ids]조회를 통해 라우팅을 수행합니다(논문 §2.1, “Hash-MoE bootstrap”).moe는 표준 top-k 라우팅 MoE입니다. 기본값: 처음 3개 레이어는hash_moe, 나머지 레이어는moe입니다. BC: 최상위 kwarg로num_hash_layers를 포함하는 레거시 구성은__post_init__시점에 통합됩니다. - swiglu_limit (
float, 선택 사항, 기본값10.0) — 라우팅된 전문가의 gate/up 사전 활성화 값을 클리핑합니다. - sliding_window (
int, 선택 사항, 기본값128) — 각 attention 블록의 sliding-window 분기에서 사용되는 로컬 윈도우 크기 n_win입니다. - o_groups (
int, 선택 사항, 기본값8) — 그룹 출력 투영(grouped output projection)의 헤드 그룹 수 g (논문 §2.3.1, “Grouped Output Projection”). - o_lora_rank (
int, 선택 사항, 기본값1024) — 그룹 출력 투영(grouped output projection)에서 그룹별 중간 차원 d_g입니다. - index_n_heads (
int, 선택 사항, 기본값64) — 인덱서 쿼리 헤드 수 n_h^I (논문 §2.3.1, 식 14). - index_head_dim (
int, 선택 사항, 기본값128) — Indexer head dim c^I (논문 §2.3.1). - index_topk (
int, 선택 사항, 기본값512) — Lightning Indexer가 top-k를 통해 각 쿼리당 유지하는 압축 항목의 수(논문 §2.3.1, 식 17). - num_nextn_predict_layers (
int, 선택 사항, 기본값1) — 업스트림 체크포인트의 MTP 레이어 수(여기서는 인스턴스화되지 않음). - output_router_logits (
bool, 선택 사항, 기본값False) — 모델이 router logits를 반환할지 여부입니다. 이 옵션을 활성화하면 load balancing loss와 router z-loss를 포함한 auxiliary loss도 출력할 수 있습니다. - router_aux_loss_coef (
float, 선택 사항, 기본값0.001) — 보조 로드 밸런싱 손실 계수입니다. MoE 모델에서 불균형한 전문가 라우팅을 처벌하는 데 사용됩니다. - router_jitter_noise (
float, 선택 사항, 기본값0.0) — 학습 중 로드 밸런싱을 개선하기 위해 라우터 로짓에 추가할 노이즈의 양. - hidden_act (
str, 선택 사항, 기본값silu) — 디코더의 비선형 활성화 함수(함수 또는 문자열)입니다. 예를 들어,"gelu","relu","silu"등이 있습니다. - initializer_range (
float, 선택 사항, 기본값0.02) — 모든 가중치 행렬을 초기화하는 truncated_normal_initializer의 표준 편차입니다. - rms_norm_eps (
float, 선택 사항, 기본값1e-06) — rms 정규화 레이어에서 사용되는 epsilon 값입니다. - use_cache (
bool, 선택 사항, 기본값True) — 모델이 마지막 key/values attention을 반환할지 여부입니다(모든 모델에서 사용되지 않음).config.is_decoder=True인 경우 또는 모델이 decoder-only 생성 모델인 경우에만 관련이 있습니다. - pad_token_id (
int, 선택 사항) — 어휘에서 패딩에 사용되는 토큰 ID입니다. - bos_token_id (
int, 선택 사항, 기본값0) — 어휘에서 스트림 시작에 사용되는 토큰 id입니다. - eos_token_id (
Union[int, list[int]], 선택 사항, 기본값1) — 어휘에서 스트림 종료에 사용되는 토큰 id입니다. - tie_word_embeddings (
bool, 선택, 기본값False) — 모델의tied_weights_keys매핑에 따라 가중치 임베딩을 묶을지 여부. - rope_parameters (
Union[~modeling_rope_utils.RopeParameters, dict], 선택) — RoPE 임베딩의 구성 매개변수를 포함하는 사전입니다. 사전에는rope_theta값이 포함되어야 하며, 더 긴max_position_embeddings로 RoPE를 사용하려는 경우 스케일링에 사용되는 매개변수를 선택적으로 포함할 수 있습니다. - partial_rotary_factor (
float, 선택 사항) — head_dim 중 RoPE가 적용되는 비율입니다. 기본값은qk_rope_head_dim / head_dim이며, 이 경우 cos/sin 크기는qk_rope_head_dim가 됩니다. - attention_bias (
bool, 선택 사항, 기본값False) — 자기 주의(self-attention) 시 query, key, value 및 출력 투영 계층에 bias를 사용할지 여부입니다. - mlp_bias (
bool, 선택 사항, 기본값False) — MLP 레이어의 up_proj, down_proj, gate_proj 레이어에 bias를 사용할지 여부. - attention_dropout (
float, 선택 사항, 기본값0.0) — Attention 확률에 적용할 dropout 비율입니다.
이것은 DeepseekV4Model의 설정을 저장하기 위한 설정 클래스입니다. 지정된 인자에 따라 Deepseek V4 모델을 인스턴스화하고 모델 아키텍처를 정의하는 데 사용됩니다. 기본값으로 설정을 인스턴스화하면 deepseek-ai/DeepSeek-V4-Flash-Base와 유사한 설정이 생성됩니다.
Configuration 객체는 PreTrainedConfig를 상속하며 모델 출력을 제어하는 데 사용할 수 있습니다. 자세한 내용은 PreTrainedConfig의 문서를 참고하세요.
V4에서는 표준 길이/타입 멤버십 검사에 더해, 실제로 제공하는 세 가지 attention-block 유형과 두 가지 MLP-block 유형으로 전역 ALLOWED_LAYER_TYPES를 제한합니다.
DeepseekV4Model
클래스 transformers.DeepseekV4Model
< source >( config: DeepseekV4Config )
매개변수
- config (DeepseekV4Config) — 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 연관된 가중치를 로드하지 않으며, 구성 정보만 로드합니다. 모델 가중치를 로드하려면 from_pretrained() 메서드를 확인하세요.
Deepseek V4 모델의 원본 출력으로, 상단에 특정 헤드가 없는 상태의 raw hidden-states를 출력합니다.
이 모델은 PreTrainedModel에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대한 세부 사항은 상위 클래스 문서를 확인하세요.
이 모델은 또한 PyTorch torch.nn.Module의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법 및 동작과 관련된 모든 사항은 PyTorch 문서를 참조하세요.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → MoeModelOutputWithPast or tuple(torch.Tensor)
매개변수
- input_ids (
torch.LongTensor형상이(batch_size, sequence_length), 선택 사항) — 어휘(input vocabulary)에서 입력 시퀀스 토큰의 인덱스입니다. 기본적으로 패딩은 무시됩니다.AutoTokenizer를 사용하여 인덱스를 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()를 참조하세요.
- attention_mask (
torch.Tensor형상이(batch_size, sequence_length), 선택 사항) — 패딩 토큰 인덱스에 대한 attention을 수행하지 않도록 방지하는 마스크. [0, 1]에서 선택된 마스크 값: 마스크되지 않은 토큰은 1, 마스크된 토큰은 0. attention mask란 무엇인가요?[0, 1]:- 마스크되지 않은 토큰에 대해 1
- 마스크된 토큰에 대해 0
- position_ids (
torch.LongTensor의 shape(batch_size, sequence_length), , 선택 사항) — 위치 임베딩에서 각 입력 시퀀스 토큰의 위치 인덱스. 범위[0, config.n_positions - 1]. - past_key_values (
~cache_utils.Cache, 선택 사항) — 순차적 디코딩을 가속화할 수 있는 사전 계산된 hidden-states(self-attention 블록과 cross-attention 블록의 key 및 value). 일반적으로 이는past_key_values디코딩의 이전 단계에서 모델이 반환한use_cache=True또는config.use_cache=True.입력으로 Cache 인스턴스만 허용되며, kv cache 가이드를 참고하세요.
past_key_values가 전달되지 않으면 기본적으로 DynamicCache가 초기화됩니다.모델은 입력으로 제공된 것과 동일한 캐시 형식을 출력합니다.
past_key_values를 사용하는 경우, 이 모델에 과거 키 값 상태가 제공되지 않은input_ids만 입력해야 하며, 이때의 shape은(batch_size, unprocessed_length)입니다. shape이(batch_size, sequence_length)인 전체input_ids를 입력하지 않습니다. - inputs_embeds (
torch.Tensor, shape(batch_size, sequence_length, hidden_size), 선택) —input_ids를 전달하는 대신 임베딩 표현을 직접 전달할 수 있습니다. 이는 모델 내부의 임베딩 조회 행렬보다input_ids인덱스를 관련 벡터로 변환하는 방식에 대해 더 세밀한 제어가 필요한 경우에 유용합니다. - use_cache (
bool, 선택 사항) —True로 설정하면past_key_values키 값 상태가 반환되며, 디코딩 속도를 높이는 데 사용할 수 있습니다(past_key_values참조).
반환값
MoeModelOutputWithPast 또는 tuple(torch.Tensor)
MoeModelOutputWithPast 또는 torch.Tensor의 튜플(return_dict=False가 전달되었거나 config.return_dict=False인 경우)로, 구성(DeepseekV4Config)과 입력에 따라 다양한 요소를 포함합니다.
DeepseekV4Model의 forward 메서드는 __call__ 특수 메서드를 오버라이드합니다.
이 함수 내에서 forward pass의 레시피를 정의해야 하지만, 이후에는 이 함수 대신
Module인스턴스를 호출해야 합니다. 전자는 전처리 및 후처리 단계를 실행하는 것을 처리하는 반면, 후자는 이를 조용히 무시하기 때문입니다.
last_hidden_state (
torch.Tensor, shape(batch_size, sequence_length, hidden_size)) — 모델의 마지막 레이어 출력에서 생성된 hidden-state 시퀀스입니다.past_key_values (
Cache, 선택 사항,use_cache=True가 전달되었거나config.use_cache=True인 경우 반환됨) — Cache 인스턴스입니다. 자세한 내용은 kv cache 가이드를 참고하세요.순차적 디코딩을 가속화하는 데 사용할 수 있는 사전 계산된 hidden-states(셀프 어텐션 블록의 key와 value, 그리고
config.is_encoder_decoder=True인 경우 크로스 어텐션 블록의 key와 value)를 포함합니다(입력past_key_values참조).hidden_states (
tuple(torch.Tensor), 선택 사항,output_hidden_states=True가 전달되거나config.output_hidden_states=True인 경우 반환됨) —torch.Tensor의 튜플(모델에 임베딩 레이어가 있는 경우 임베딩 출력 1개 + 각 레이어의 출력 1개)로, 모양은(batch_size, sequence_length, hidden_size)입니다.각 레이어의 출력에서 모델의 Hidden-states와 선택적 초기 임베딩 출력을 포함합니다.
attentions (
tuple(torch.Tensor), 선택 사항,output_attentions=True가 전달되었거나config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된torch.Tensor의 튜플로, 모양은(batch_size, num_heads, sequence_length, sequence_length)입니다.self-attention 헤드에서 가중 평균을 계산하는 데 사용되는 attention softmax 이후의 attention 가중치.
router_logits (
tuple(torch.Tensor), 선택 사항,output_router_probs=True와config.add_router_probs=True가 전달되었거나config.output_router_probs=True인 경우 반환됨) — 각 레이어마다 하나씩, 모양이(batch_size, sequence_length, num_experts)인torch.Tensor의 튜플.MoE 라우터가 계산하는 softmax 적용 후의 원시 라우터 로짓(raw router logits)입니다. 이 값들은 Mixture of Experts 모델의 보조 손실(auxiliary loss)을 계산하는 데 사용됩니다.
DeepseekV4ForCausalLM
클래스 transformers.DeepseekV4ForCausalLM
< source >( config: DeepseekV4Config )
매개변수
- config (DeepseekV4Config) — 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 연관된 가중치를 로드하지 않으며, 구성 정보만 로드합니다. 모델 가중치를 로드하려면 from_pretrained() 메서드를 확인하세요.
causal language modeling을 위한 Deepseek V4 모델.
이 모델은 PreTrainedModel에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대한 세부 사항은 상위 클래스 문서를 확인하세요.
이 모델은 또한 PyTorch torch.nn.Module의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법 및 동작과 관련된 모든 사항은 PyTorch 문서를 참조하세요.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneuse_cache: bool | None = Noneoutput_router_logits: bool | None = Nonelogits_to_keep: typing.Union[int, torch.Tensor] = 0**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → MoeCausalLMOutputWithPast or tuple(torch.Tensor)
매개변수
- input_ids (
torch.LongTensor형상이(batch_size, sequence_length), 선택 사항) — 어휘(input vocabulary)에서 입력 시퀀스 토큰의 인덱스입니다. 기본적으로 패딩은 무시됩니다.AutoTokenizer를 사용하여 인덱스를 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()를 참조하세요.
- attention_mask (
torch.Tensor형상이(batch_size, sequence_length), 선택 사항) — 패딩 토큰 인덱스에 대한 attention을 수행하지 않도록 방지하는 마스크. [0, 1]에서 선택된 마스크 값: 마스크되지 않은 토큰은 1, 마스크된 토큰은 0. attention mask란 무엇인가요?[0, 1]:- 마스크되지 않은 토큰에 대해 1
- 마스크된 토큰에 대해 0
- position_ids (
torch.LongTensor의 shape(batch_size, sequence_length), , 선택 사항) — 위치 임베딩에서 각 입력 시퀀스 토큰의 위치 인덱스. 범위[0, config.n_positions - 1]. - past_key_values (
~cache_utils.Cache, 선택 사항) — 순차적 디코딩을 가속화할 수 있는 사전 계산된 hidden-states(self-attention 블록과 cross-attention 블록의 key 및 value). 일반적으로 이는past_key_values디코딩의 이전 단계에서 모델이 반환한use_cache=True또는config.use_cache=True.입력으로 Cache 인스턴스만 허용되며, kv cache 가이드를 참고하세요.
past_key_values가 전달되지 않으면 기본적으로 DynamicCache가 초기화됩니다.모델은 입력으로 제공된 것과 동일한 캐시 형식을 출력합니다.
past_key_values를 사용하는 경우, 이 모델에 과거 키 값 상태가 제공되지 않은input_ids만 입력해야 하며, 이때의 shape은(batch_size, unprocessed_length)입니다. shape이(batch_size, sequence_length)인 전체input_ids를 입력하지 않습니다. - inputs_embeds (
torch.Tensor, shape(batch_size, sequence_length, hidden_size), 선택) —input_ids를 전달하는 대신 임베딩 표현을 직접 전달할 수 있습니다. 이는 모델 내부의 임베딩 조회 행렬보다input_ids인덱스를 관련 벡터로 변환하는 방식에 대해 더 세밀한 제어가 필요한 경우에 유용합니다. - labels (
torch.LongTensor, shape(batch_size, sequence_length), 선택 사항) — 마스크 언어 모델링 손실을 계산하는 데 사용되는 라벨입니다. 인덱스는[0, ..., config.vocab_size]범위 내의 값이거나 -100이어야 합니다(input_idsdocstring 참조). 인덱스가-100으로 설정된 토큰은 무시(마스크)되며, 손실은[0, ..., config.vocab_size]범위의 라벨을 가진 토큰에 대해서만 계산됩니다. - use_cache (
bool, 선택 사항) —True로 설정하면past_key_values키 값 상태가 반환되며, 디코딩 속도를 높이는 데 사용할 수 있습니다(past_key_values참조). - output_router_logits (
bool, 선택) — 모든 라우터의 logits를 반환할지 여부입니다. 라우터 손실을 계산하는 데 유용하며, 추론 단계에서는 반환하지 않아야 합니다. - logits_to_keep (
Union[int, torch.Tensor], 선택 사항, 기본값0) —int인 경우, 마지막logits_to_keep토큰에 대한 logits를 계산합니다.0인 경우, 모든input_ids에 대한 logits를 계산합니다(특수한 경우). 생성에는 마지막 토큰의 logits만 필요하며, 해당 토큰에 대해서만 계산하면 메모리를 절약할 수 있습니다. 이는 긴 시퀀스나 큰 어휘 크기의 경우 상당한 이점을 제공합니다.torch.Tensor인 경우, 시퀀스 길이 차원에서 유지할 인덱스에 해당하는 1차원 텐서여야 합니다. 이는 패킹된 텐서 형식(배치와 시퀀스 길이를 단일 차원으로 사용하는 경우)을 사용할 때 유용합니다.
반환값
MoeCausalLMOutputWithPast 또는 tuple(torch.Tensor)
MoeCausalLMOutputWithPast 또는 torch.Tensor의 튜플(return_dict=False가 전달되었거나 config.return_dict=False인 경우)로, 구성(DeepseekV4Config)과 입력에 따라 다양한 요소를 포함합니다.
DeepseekV4ForCausalLM의 forward 메서드는 __call__ 특수 메서드를 오버라이드합니다.
이 함수 내에서 forward pass의 레시피를 정의해야 하지만, 이후에는 이 함수 대신
Module인스턴스를 호출해야 합니다. 전자는 전처리 및 후처리 단계를 실행하는 것을 처리하는 반면, 후자는 이를 조용히 무시하기 때문입니다.
loss (
torch.Tensor, shape(1,), 선택 사항,labels이 제공될 때 반환됨) — 언어 모델링 손실(다음 토큰 예측용).logits (
torch.Tensor, shape(batch_size, sequence_length, config.vocab_size)) — 언어 모델링 헤드에서 생성된 예측 점수(SoftMax 적용 전 각 어휘 토큰에 대한 점수).aux_loss (
torch.Tensor, 선택 사항,output_router_logits=True가 전달되거나config.output_router_logits=True인 경우, 그리고 모델이 로드 밸런싱 손실로 라우터를 학습하는 경우 반환됨) — 희소 모듈에 대한 로드 밸런싱 보조 손실입니다. 대신 라우터 바이어스로 전문가를 균형 맞추는 모델(DeepSeek-V3 및 이를 기반으로 파생된 아키텍처)은router_logits를 반환하되 여기서는None을 반환합니다.router_logits (
tuple(torch.Tensor), 선택 사항,output_router_logits=True가 전달되거나config.output_router_logits=True인 경우 반환됨) —torch.Tensor의 튜플(스파스 레이어마다 하나)로, 형태는(batch_size * sequence_length, num_experts)입니다.MoE 라우터가 계산한 원시 라우터 로짓입니다. 로드 밸런싱 손실을 계산하거나 토큰이 전문가로 어떻게 분배되는지 확인하는 데 사용할 수 있습니다.
past_key_values (
Cache, 선택 사항,use_cache=True가 전달되었거나config.use_cache=True인 경우 반환됨) — Cache 인스턴스입니다. 자세한 내용은 kv cache 가이드를 참고하세요.순차적 디코딩을 가속화하는 데 사용할 수 있는 사전 계산된 hidden-states(셀프 어텐션 블록의 key와 value)를 포함합니다(입력
past_key_values참조).hidden_states (
tuple(torch.Tensor), 선택 사항,output_hidden_states=True가 전달되거나config.output_hidden_states=True인 경우 반환됨) —torch.Tensor의 튜플(모델에 임베딩 레이어가 있는 경우 임베딩 출력 1개 + 각 레이어의 출력 1개)로, 모양은(batch_size, sequence_length, hidden_size)입니다.각 레이어의 출력에서 모델의 Hidden-states와 선택적 초기 임베딩 출력을 포함합니다.
attentions (
tuple(torch.Tensor), 선택 사항,output_attentions=True가 전달되었거나config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된torch.Tensor의 튜플로, 모양은(batch_size, num_heads, sequence_length, sequence_length)입니다.self-attention 헤드에서 가중 평균을 계산하는 데 사용되는 attention softmax 이후의 attention 가중치.
예:
>>> from transformers import AutoTokenizer, DeepseekV4ForCausalLM
>>> model = DeepseekV4ForCausalLM.from_pretrained("mistralai/DeepseekV4-8x7B-v0.1")
>>> tokenizer = AutoTokenizer.from_pretrained("mistralai/DeepseekV4-8x7B-v0.1")
>>> prompt = "Hey, are you conscious? Can you talk to me?"
>>> inputs = tokenizer(prompt, return_tensors="pt")
>>> # Generate
>>> generate_ids = model.generate(inputs.input_ids, max_length=30)
>>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
"Hey, are you conscious? Can you talk to me?\nI'm not conscious, but I can talk to you."