
Agora에 의해주의를 끌고 있습니다. 우리는 인류를 진전시키는 데 전념하는 완전히 새로운 오픈 소스 멀티 모달 AI 연구 기관입니다.
이 프로젝트에 기여하거나 지원을 받으려면 여기에 참여하십시오!

Attrictgrid는 고급주의 메커니즘을 AI 모델에 통합하는 것을 민주화하도록 설계된 최첨단 프레임 워크입니다. 주의 기반 변압기 모델의 최신 개발에 힘 입어 TreeptionGrid는 기계 학습 실무자, 연구원 및 애호가 모두에게주의 메커니즘의 세계를 열어줍니다.
주의를 끌면 PIP를 사용하여 패키지를 설치하십시오.
pip install AttentionGrid주의 메커니즘 또는 주의력을 가진 변압기 모델을 구현하는 것은 다음과 같이 쉽습니다.
from AttentionGrid import BlockwiseParallelJax
import jax . numpy as jnp
# Initialize the class
bpjax = BlockwiseParallelJax (
q_chunk_size = 64 ,
k_chunk_size = 64 ,
hidden_size = 768 ,
num_heads = 12 ,
rotary_dim = 32 ,
intermediate_size = 3072
)
# Suppose we have hidden_states, attention_mask, and position_ids as input data
hidden_states = jnp . random . rand ( 1 , 100 , 768 )
attention_mask = jnp . random . rand ( 1 , 1 , 100 , 100 )
position_ids = jnp . arange ( 100 ). reshape ( 1 , 100 )
# You can now apply the attention mechanism to your input data
output = bpjax . forward ( hidden_states , attention_mask , position_ids )커뮤니티와주의를 기울이는 것이 좋습니다! 다음은 여러 소셜 미디어 플랫폼에 대한 빠른 공유 링크입니다.
트위터에서 공유하십시오
LinkedIn에서 공유하십시오
Facebook에서 공유하십시오
Reddit에 공유하십시오
WhatsApp에서 공유하십시오
주의를 기울이고 AI의 민주화에 기여해 주셔서 감사합니다! 함께, 우리는 가능한 것의 경계를 밀 수 있습니다.
AI의 광대 한 환경에서주의 메커니즘은 데이터의 미묘함을 분별하고 중요한 측면에 중점을두고 전반적인 성능을 향상시킬 수있는 강력한 모델을 만드는 능력에 혁명을 일으켰습니다. 주의를 기울인 우리의 비전은 이러한 최첨단 메커니즘과 실제 응용 분야의 격차를 해소하여 이러한 기술에 다양한 AI 응용 프로그램에서 쉽게 구현할 수 있고 구현할 수있는 도구를 제공하는 것입니다.
주의력은 직관적이고 유연한 아키텍처로 설계되었으며 4 가지 주요 구성 요소로 분할되었습니다.
핵심 : 이것은 우리의 프레임 워크의 기반이며,주의 메커니즘 및 변압기 모델을위한 기본 구조를 레이아웃하는 추상 클래스를 수용합니다.
관심 ? : 다양한주의 메커니즘에 전념하는 디렉토리. 각주의 메커니즘은 핵심에 제공된 청사진을 기반으로 구현됩니다.
Transformers ? : 이것은 변압기 모델이 생겨나 고 각각의 코어에 정의 된 설계에 따라 조각 된 곳입니다.
UTILS : 모델 로딩, 데이터 전처리 등과 같은 필수 작업을 위해 도우미 클래스로 채워진 도구 상자.
예 : 실습 예제 및 사용 시나리오로 구현을 탈취합니다.
모듈 식 구조 : 다양한 변압기 모델과 다른주의 메커니즘을 혼합하고 일치시킵니다.
사용자 친화적 : 신속하게 시작하는 데 도움이되는 명확한 문서 및 예제.
오픈 소스 : 공헌에 대한 개방형, 주의력은 집단 지식과 공유 진보에 대해 번성합니다.
자세한 내용은 저장소의 '예제'폴더를 참조하십시오.
우리는 공개적으로 관심을 끌고 있습니다! 새로운 기능 제안이 있거나 버그 보고서가 있거나 코드에 추가하려면 문제를 열거 나 풀어 요청을 제출하십시오.
Attrictgrid는 Apache 라이센스에 따라 라이센스가 부여 된 오픈 소스 소프트웨어입니다.
주의 메커니즘은 AI를 변환하여 기계가 입력 데이터의 중요한 부분에 '초점을 맞출 수 있도록합니다. 주의를 기울이면 우리는 이러한 강력한 도구에 대한 접근을 민주화하는 것을 목표로합니다. 우리는 AI의 미래가 주의력의 힘에 속한다고 믿으며,주의를 끌면서이 여정을 가속화하기를 희망합니다. 우리의 저장소를 탐색하고, 우리의 원인에 합류하고,이 흥미 진진한 풍경을 함께 탐색합시다!
"세부 사항은 세부 사항이 아닙니다. 디자인을 만듭니다." -CHARLES EAMES
플래시주의와 변형을 통합합니다
획기적인 관심을 통합합니다
블록 혜택을 통합합니다
동적 스파 스 플래시주의를 통합합니다
ImageBind의 교차 관심을 통합하십시오
Colt-5주의를 통합합니다
다중 정체주의를 통합합니다
Lucid Rains의 래퍼 통합 x_transformers, Decoder, Attention, Encoder, Transformer Wapper
| 기구 | 호출 방법 | 예제 가져 오기 |
|---|---|---|
| 자기 참여 | from AttentionGrid import SelfAttention | from AttentionGrid import SelfAttention |
| 세계적인 관심 | from AttentionGrid import GlobalAttention | from AttentionGrid import GlobalAttention |
| 지역의 관심 | from AttentionGrid import LocalAttention | from AttentionGrid import LocalAttention |
| 계층 적주의 | from AttentionGrid import HierarchicalAttention | from AttentionGrid import HierarchicalAttention |
| 역동적 인 희소주의 | from AttentionGrid import dynamic_sparse_attention | from AttentionGrid import dynamic_sparse_attention |
| 소형 기능 | from AttentionGrid import compact | from AttentionGrid import compact |
| 패드 인덱스 기능 | from AttentionGrid import pad_index | from AttentionGrid import pad_index |
| 블록 혜택 평행주의 | from AttentionGrid import BlockwiseParallelJax | from AttentionGrid import BlockwiseParallelJax |
| 플래시주의 | from AttentionGrid import FlashAttention | from AttentionGrid import FlashAttention |
| 획기적인 관심 | from AttentionGrid import LandmarkAttention | from AttentionGrid import LandmarkAttention |
| Colt-5주의 | from AttentionGrid import Colt5Attention | from AttentionGrid import Colt5Attention |
| 다중 정체주의 | from AttentionGrid import MultiQueryAttention | from AttentionGrid import MultiQueryAttention |
| 확장 된주의 | from AttentionGrid import DilatedAttention | from AttentionGrid import DilatedAttention |
Agora의 dynamic_sparse_attention 함수를 통해 해시-스파 스 구현과 QK-SPARSE 구현 중에서 선택할 수있는 유연성이 가능합니다. 이 기능의 목표는 선택한 sparsity_mode 기반으로 드문주의 메커니즘을 동적으로 지시하는 것입니다.
함수 매개 변수는 다음과 같습니다.
q : 모양의 쿼리 텐서 (Batch, N_CTX_Q, H, D_HEAD)k : 모양의 키 텐서 (Batch, N_CTX_KV, H, D_HEAD)v : 모양의 가치 텐서 (Batch, N_CTX_KV, H, D_HEAD)q_idx & k_idx : sparsity_mode가 '해시'인 경우 버킷 인덱스를 나타내거나 sparsity_mode가 'qk'인 경우 주어진 헤드를 유지할 것인지를 나타냅니다. 텐서 모양은 각각 (Batch, N_CTX_Q, H) 및 (Batch, N_CTX_KV, H)입니다.sm_scale : 정규화 상수, 1/sqrt (d_head)를 지정하지 않는 한.sparsity_mode : 'Hash'는 해시 스파르스 구현을 선택하고 QK-SPARSE 구현을 위해 'QK'를 선택합니다. sm_scale 은 제공되지 않은 경우 기본적으로 계산되며, 알 수없는 sparsity_mode 가 주어지면 키 오르러가 발생합니다.
그런 다음이 함수는 sparsity_mode 확인하고 해당 값에 따라 hash_sparse_attention 또는 qk_sparse_attention 호출합니다.
compact 함수는 keep_tensor 의 정보를 사용하여 입력 텐서 x 의 소형 표현을 구축합니다.
함수 매개 변수는 다음과 같습니다.
x : 모양 (Batch, N_CTX, H, D_HEAD)과 함께 입력 텐서.keep_tensor . 이 함수는 먼저 헤드 당 비 killed 요소의 수를 계산하는 indices_per_head 를 계산합니다. 동일한 요소의 순서를 유지하면서 keep_tensor 를 내림차순으로 정렬합니다 (stable = true). 그런 다음 인덱스 텐서를 기반으로 x 의 요소를 수집합니다. 결과적으로 인덱스 텐서 및 헤드 당 비유 해제 요소의 수를 나타내는 텐서와 함께 x 의 소형 표현이 있습니다.
pad_index 기능은 커널을 준수하도록 인덱스 텐서를 패드합니다. 다음 매개 변수가 필요합니다.
index : compact , Shape (Batch, Buffer_Size, H)가 제공하는 원래 인덱스 텐서. 각 배치 및 타임 스텝에 대해, 그것은 유래 한 헤드 인덱스를 나타냅니다.indices_per_head : 각 헤드마다 얼마나 많은 인덱스를 떨어 뜨리지 않았는지 포함합니다. 인덱스 텐서의 사본을 생성하고 indices_per_head 의 크기에 따라 마스크를 만듭니다. 그런 다음 마스크의 True에 해당하는 사본의 인덱스가 pad_idx 와 동일하게 수정합니다.
qk_sparse_attention 함수는 동적 스파 스주의 메커니즘의 일부입니다. sparsity_mode 가 'QK'로 설정 될 때 사용됩니다. 이 기능은 QK-SPARSE주의 메커니즘을 구현하며 q_keep 및 k_keep 매개 변수는 유형의 플로트이어야합니다.
먼저 compact 기능을 사용하여 쿼리, 키 및 가치 텐서의 소형 표현을 구축합니다. 그런 다음 pad_index 기능을 사용하여 인덱스 텐서를 패드합니다. 그런 다음 텐서는 커널과의 호환성을 위해 전환됩니다. 마지막으로,이 함수는 qk_sparse_attention_kernel 기능을 호출하고 결과 텐서를 원래 치수 공간으로 다시 산산으로 흩어집니다.
hash_sparse_attention 함수는 동적 스파 스주의 메커니즘의 일부입니다. sparsity_mode '해시'로 설정 될 때 사용됩니다. 이 기능은 해시 스파 스주의 메커니즘을 구현합니다.
이 함수는 qk_sparse_attention 과 동일한 입력 매개 변수를 사용합니다. 그러나 q_keep 및 k_keep 매개 변수 대신 hash_sparse_attention 함수는 각각 쿼리 및 키에 대한 버킷 지수를 나타내는 q_bucket_idx 및 k_bucket_idx 필요합니다.
hash_sparse_attention 함수는 먼저 sort_bucketed_attention 함수를 사용한 버킷 인덱스를 기반으로 쿼리, 키 및 값 텐서를 정렬합니다. 그런 다음 compact 함수를 사용하여 정렬 된 쿼리, 키 및 가치 텐서의 소형 표현을 구축합니다. 그런 다음 pad_index 기능을 사용하여 인덱스 텐서를 패드합니다.
그런 다음 텐서는 커널과의 호환성을 위해 전환됩니다. 그런 다음이 함수는 hash_sparse_attention_kernel 함수를 호출하고 결과 텐서를 원래 치수 공간으로 다시 뿌립니다.
sort_bucketed_attention 함수는 hash_sparse_attention 에 사용되는 도우미 함수입니다. 주어진 버킷 지수를 기준으로 입력 텐서를 정렬합니다.
함수 매개 변수는 다음과 같습니다.
qkv : 쿼리, 키, 값 모양 텐서 (Batch, N_CTX, H, D_HEAD)qkv_bucket_idx : 쿼리, 키 및 모양 값에 대한 버킷 인덱스 (Batch, N_CTX, H) 이 함수는 먼저 qkv_bucket_idx 텐서를 정렬하고 정렬 된 인덱스를 가져옵니다. 그런 다음 정렬 된 지수를 사용하여 qkv 텐서를 정렬합니다. 또한 qkv_bucket_idx 호환성을위한 qkv 와 동일한 모양으로 확장합니다.
qk_sparse_attention_kernel 함수는 qk_sparse_attention 에 사용되는 커널 함수입니다. 쿼리의 SoftMax 및 키 제품을 기반으로 가중치 값의 합계를 계산합니다.
함수 매개 변수는 다음과 같습니다.
q : 모양의 쿼리 텐서 (Batch, N_CTX_Q, H, D_HEAD)k : 모양의 키 텐서 (Batch, N_CTX_KV, H, D_HEAD)v : 모양의 가치 텐서 (Batch, N_CTX_KV, H, D_HEAD)sm_scale : 정규화 상수, 1/sqrt (d_head)를 지정하지 않는 한. hash_sparse_attention_kernel 함수는 hash_sparse_attention 에 사용되는 커널 함수입니다. qk_sparse_attention_kernel 과 유사하게 작동하지만 해시 스파 스주의를 위해 버킷을 처리합니다.
함수 매개 변수는 qk_sparse_attention_kernel 의 함수 매개 변수와 동일합니다. 그러나 q , k 및 v 버킷 지수에 따라 분류되고 압축되었습니다.
커널은 쿼리 및 키의 제품을 계산하고 sm_scale 로 스케일링하고 SoftMax를 적용하여 가중치를 얻은 다음 가중치의 값을 계산합니다.
이것은 문서에 대한 일반적인 해석이며, 실제로 이러한 기능을 이해하고 수정하려면 드문주의 메커니즘과 딥 러닝 원리에 대한 심층적 인 지식이 필요할 수 있습니다.
blockwise_compute_attn 함수 :
blockwise_compute_attn 함수는 BlockwiseParallelJax 클래스의 중요한 부분이며 모델의주의 메커니즘을 블록 방식으로 계산하는 데 사용됩니다.
매개 변수 :
query , key , value :이 매개 변수는 각각 쿼리, 키 및 값을 나타내는주의 계산의 주요 입력입니다.bias : SoftMax 이전의주의 점수에 편향을 추가하는 데 사용되는 선택적 매개 변수.deterministic : 탈락을 적용할지 여부를 결정하는 데 사용되는 부울 깃발.dropout_rng : 드롭 아웃을위한 랜덤 번호 생성기.attn_pdrop :주의를 기울일 확률.causal_mask : 인과 관계 마스크를 사용할지 여부를위한 부울 깃발.query_chunk_size , key_chunk_size : 각 쿼리의 크기와 키 청크의 크기.dtype : 계산의 데이터 유형. 기본값은 jnp.float32 입니다.policy :이 매개 변수는 그라디언트 체크 포인트 정책을 정의합니다.precision :이 매개 변수는 계산의 정밀도 수준을 설정하는 데 사용됩니다. 기본값은 lax.Precision.HIGHEST 입니다.prevent_cse : 일반적인 서브 표현 제거를 방지하는 데 사용되는 부울 플래그.blockwise_compute_ffn 함수 :
blockwise_compute_ffn 함수는 모델의 피드 포워드 네트워크를 블록 방식으로 계산하는 데 사용됩니다.
매개 변수 :
cell : 함수가 적용되는 네트워크의 셀.inputs : 피드 포워드 네트워크의 입력 데이터.chunk_size : 블록 계산을위한 각 청크의 크기.deterministic : 탈락을 적용할지 여부를 결정하는 데 사용되는 부울 깃발.policy :이 매개 변수는 그라디언트 체크 포인트 정책을 정의합니다.prevent_cse : 일반적인 서브 표현 제거를 방지하는 데 사용되는 부울 플래그.Blockwise_LM_HEAD 클래스 :
Blockwise_LM_Head 클래스는 선형 변환과 SoftMax 기능을 적용하여 입력의 각 위치에 대한 어휘에 대한 분포를 생성하는 모듈입니다.
vocab_size : 어휘의 크기는 선형 변환의 출력 차원의 크기이기도합니다.chunk_size : 블록 계산을위한 각 청크의 크기.policy :이 매개 변수는 그라디언트 체크 포인트 정책을 정의합니다.dtype : 계산의 데이터 유형. 기본값은 jnp.float32 입니다.prevent_cse : 일반적인 서브 표현 제거를 방지하는 데 사용되는 부울 플래그.Blockwise_cross_entropy 함수 :
blockwise_cross_entropy 함수는 블록 방식으로 모델의 예측에 대한 교차 엔트로피 손실을 계산합니다.
매개 변수 :
logits : 모델의 출력 예측.tokens : 진정한 레이블.valid : 입력에서 유효한 위치를 지정하는 마스크.chunk_size : 블록 계산을위한 각 청크의 크기.policy :이 매개 변수는 그라디언트 체크 포인트 정책을 정의합니다.prevent_cse : 일반적인 서브 표현 제거를 방지하는 데 사용되는 부울 플래그.BlockwiseParalleljax 클래스 :
BlockwiseParallelJax ( q_chunk_size , k_chunk_size , hidden_size , num_heads , rotary_dim , intermediate_size , layer_norm_epsilon = 1e-5 , activation_function = "gelu" , attn_pdrop = 0.0 , resid_pdrop = 0.0 , max_position_embeddings = 1024 , dtype = jnp . float32 , causal = True , policy = 'nothing_saveable' , prevent_cse = False , float32_logits = False )매개 변수
q_chunk_size : 정수. 자체 정보의 쿼리 용 청크 크기.k_chunk_size : 정수. 자체 소지의 키를위한 청크 크기.hidden_size : 정수. 변압기에서 숨겨진 층의 치수.num_heads : 정수. 자체 정보 메커니즘의주의 수에 이르렀습니다.rotary_dim : 정수 또는 없음. 로터리 위치 인코딩에 사용할 치수 수.intermediate_size : 정수. 피드 포워드 네트워크에서 중간 층의 크기.layer_norm_epsilon : float. 층 정규화에서 0에 의한 분할을 방지하기위한 작은 상수. 기본값은 1e-5 입니다.activation_function : 문자열. Feed-Forward 네트워크에서 사용할 활성화 기능. 기본값은 'gelu' 입니다.attn_pdrop : float. 주의 메커니즘에 대한 탈락 확률. 기본값은 0.0 입니다.resid_pdrop : float. 잔류 연결에 대한 탈락 확률. 기본값은 0.0 입니다.max_position_embeddings : 정수. 사용할 최대 위치 임베딩 수. 기본값은 1024 입니다.dtype : jnp.dtype. 계산에 사용할 데이터 유형. 기본값은 jnp.float32 입니다.causal : 부울. 인과 관계 (자동 중심) 모드 사용 여부. 기본값은 True 입니다.policy : 문자열. 점검 점검을위한 정책. 기본값은 'nothing_saveable' 입니다.prevent_cse : 부울. 일반적인 서브 표현 제거 (CSE)를 방지할지 여부. 기본값은 False 입니다.float32_logits : 부울. 로그 계산에 float32를 사용할지 여부. 기본값은 False 입니다.행동 양식
BlockwiseParallelJax 클래스의 주요 방법은 Transformer 블록의 전방 패스를 수행하는 forward 방법입니다.
forward ( hidden_states , attention_mask , position_ids , deterministic = True , init_cache = False )hidden_states : jnp.ndarray. 변압기 블록에 대한 입력 텐서. 모양 (batch_size, sequence_length, hidden_size) 이 있어야합니다.attention_mask : jnp.ndarray. 자체 정보 메커니즘에 대한주의 마스크. 모양이 있어야합니다 (batch_size, 1, 1, sequence_length) .position_ids : jnp.ndarray. 위치 인코딩의 위치 ID. 모양 (1, sequence_length) 있어야합니다.deterministic : 부울. 결정 론적 모드 사용 여부 (드롭 아웃 없음). 기본값은 True 입니다.init_cache : 부울. 빠른 디코딩을 위해 캐시를 초기화할지 여부. 기본값은 False 입니다. 이 메소드는 hidden_states 와 같은 모양을 갖는 변압기 블록의 출력 텐서를 반환합니다.
예제 사용
다음 예제는 BlockwiseParallelJax 클래스 사용 방법을 보여줍니다.
# Initialize
from jax import random
import jax . numpy as jnp
from AttentionGrid import BlockwiseParallelJax
# Initialize transformer block
block = BlockwiseParallelJax (
q_chunk_size = 64 ,
k_chunk_size = 64 ,
hidden_size = 768 ,
num_heads = 12 ,
rotary_dim = 64 ,
intermediate_size = 3072 ,
)
# Create a batch of input tensors
key = random . PRNGKey ( 0 )
batch_size = 8
sequence_length = 128
hidden_states = random . normal ( key , ( batch_size , sequence_length , block . hidden_size ))
# Create attention mask
attention_mask = jnp . ones (( batch_size , 1 , 1 , sequence_length ))
# Create position ids
position_ids = jnp . arange ( sequence_length )[ None , :]
# Forward pass
output = block . forward ( hidden_states , attention_mask , position_ids )
print ( output . shape ) # prints: (8, 128, 768) FusedLandmarkAttention 이것은 융합 랜드 마크주의 메커니즘의 전방 및 후진 기능을 캡슐화하는 Pytorch Function 클래스입니다.
forward(ctx, q, k, v, n_prefix_q, sm_scale, block_size)이 함수는 융합 된 랜드 마크주의의 전진 패스를 수행합니다.
ctx : 뒤로 패스에 사용할 변수를 저장할 수있는 객체. Pytorch의 Autograd 시스템에서 제공합니다.q : 쿼리 텐서. 인접한 것으로 가정되며 그 모양은 (배치, nheads, seqlen_q, d)이어야합니다.k : 키 텐서. 인접한 것으로 가정되며, 그 모양은 Q의 모양, 즉 (배치, nheads, seqlen_k, d)와 일치해야합니다.v : 값 텐서. 인접한 것으로 가정되며, 그 모양은 Q와 K의 모양, 즉 (배치, nheads, seqlen_k, d)와 일치해야합니다.n_prefix_q : 쿼리의 접두사 수입니다.sm_scale : SoftMax 작동에 사용되는 스케일링 계수.block_size : 블록 현저한 작업을위한 블록 크기. o : 융합 된 랜드 마크주의 메커니즘의 순방향 패스에서 출력 텐서. backward(ctx, do)이 함수는 융합 된 랜드 마크주의의 후진 통과를 수행합니다. 즉, 그라디언트를 계산합니다.
ctx : 순방향 패스에 저장된 변수를 검색 할 수있는 객체. Pytorch의 Autograd 시스템에서 제공합니다.do : 전방 함수의 출력과 관련하여 손실의 기울기. None 것입니다.fused_landmark_attention(q, k, v, is_mem, sm_scale=None, block_size=64) 이 기능은 FusedLandmarkAttention 클래스를위한 편리한 래퍼입니다.
q : 쿼리 텐서.k : 키 텐서.v : 값 텐서.is_mem : 각 키 가치 쌍이 메모리로 취급되어야하는지 여부를 나타내는 부울 텐서. 키의 시퀀스 길이와 같은 길이를 가져야합니다.sm_scale : SoftMax 작동에 사용되는 스케일링 계수. None 1.0 / sqrt(d) 로 설정됩니다.block_size : 블록 현저한 작업을위한 블록 크기. 다음은 fused_landmark_attention 함수를 사용하는 방법의 기본 예입니다.
import torch
from AttentionGrid import fused_landmark_attention
# Initialize some tensors
batch = 8
nheads = 12
seqlen = 128
d = 64
q = torch . randn ( batch , nheads , seqlen , d )
k = torch . randn ( batch , nheads , seqlen , d )
v = torch . randn ( batch , nheads , seqlen , d )
is_mem = torch . zeros ( seqlen , dtype = torch . bool )
# Call the function
output = fused_landmark_attention ( q , k , v , is_mem )
print ( output . shape ) # prints: (8, 12, 128, 64)이 예제는 먼저 일부 텐서를 초기화하여 쿼리, 키 역할을합니다.
및 값. 그런 다음 fused_landmark_attention 함수를 호출하고 출력 텐서의 모양을 인쇄합니다.
import torch
import torch . nn as nn
from AttentionGrid import DilatedAttention
# Replace this with your correct GPU device
device = "cuda:0"
dtype = torch . float16
# Create an instance of DilatedAttention
d_model = 512
num_heads = 8
dilation_rate = 2
segment_size = 64
dropout = 0.2 # Specify the dropout rate
attention = DilatedAttention (
d_model = d_model ,
num_heads = num_heads ,
dilation_rate = dilation_rate ,
segment_size = segment_size ,
dropout = dropout ,
). to ( device , dtype = dtype )
# Create some dummy input data
batch_size = 16
seq_len = 128
input_dim = d_model
inputs = torch . randn ( batch_size , seq_len , input_dim , device = device , dtype = dtype )
# Forward pass
outputs = attention ( inputs )
# Print the output shape
print ( outputs . shape ) # Expected: [batch_size, seq_len, d_model] 위의 예에서, 우리는 지정된 하이퍼 파라미터를 사용하여 DilatedAttention 클래스의 인스턴스를 만듭니다. 그런 다음 더미 입력 데이터를 생성하고주의 메커니즘을 통해 출력을 얻습니다. 마지막으로 출력 텐서의 모양을 인쇄합니다.
DilatedAttention 클래스는 확장 된주의를 구현하여 토큰 사이의 거리가 자라면서 세심한 분야를 기하 급수적으로 확장합니다. torch.nn.Module 에서 물려 받고 변압기 모델의 표준주의 메커니즘을위한 드롭 인 대체물로 사용될 수 있습니다.
d_model (int) : 입력 및 출력 임베딩의 치수.num_heads (int) :주의 헤드 수.dilation_rate (int) : 입력 순서를 희방하기위한 확장 속도.segment_size (int) : 스파이 파이션 후 각 세그먼트의 크기.dropout (플로트, 선택 사항) :주의 출력에 적용 할 수있는 탈락 확률. 기본값 : 0.0 (드롭 아웃 없음).x (텐서) : 모양의 입력 텐서 (batch_size, seq_len, d_model) .output (텐서) : 모양의 출력 텐서 (batch_size, seq_len, d_model) . 입력 텐서는 올바른 장치 (예 : GPU)에 있어야하며 적절한 데이터 유형 ( dtype )이 있어야합니다.