Transformers documentation
xLSTM
Mô hình này được công bố trên HF papers vào ngày 07-05-2024 và được đóng góp cho Hugging Face Transformers vào ngày 25-07-2025.
xLSTM
Tổng quan
Mô hình xLSTM được đề xuất trong xLSTM: Extended Long Short-Term Memory bởi Maximilian Beck, Korbinian Pöppel, Markus Spanring, Andreas Auer, Oleksandra Prudnikova, Michael Kopp, Günter Klambauer, Johannes Brandstetter và Sepp Hochreiter. xLSTM cập nhật kiến trúc LSTM gốc để cạnh tranh với các mô hình Transformer bằng cách giới thiệu exponential gating, mở rộng bộ nhớ ma trận, cũng như huấn luyện và nạp dữ liệu song song hóa được.
Biến thể mô hình 7B được huấn luyện bởi nhóm xLSTM gồm Maximilian Beck, Korbinian Pöppel, Phillip Lippe, Richard Kurle, Patrick Blies, Sebastian Böck và Sepp Hochreiter tại NXAI.
Tóm tắt từ bài báo như sau:
Vào những năm 1990, vòng băng chuyền lỗi không đổi và cổng đóng mở (gating) đã được giới thiệu như những ý tưởng trung tâm của bộ nhớ dài ngắn hạn (Long Short-Term Memory - LSTM). Kể từ đó, LSTM đã đứng vững qua thời gian và đóng góp vào nhiều câu chuyện thành công của học sâu, đặc biệt là chúng đã cấu thành những Mô hình Ngôn ngữ Lớn (Large Language Models - LLM) đầu tiên. Tuy nhiên, sự ra đời của công nghệ Transformer với cơ chế tự chú ý (self-attention) có thể song song hóa ở cốt lõi đã đánh dấu sự khởi đầu của một kỷ nguyên mới, vượt trội hơn LSTM khi mở rộng quy mô. Chúng tôi giờ đây đặt ra một câu hỏi đơn giản: Chúng ta có thể đạt được bao xa trong việc mô hình hóa ngôn ngữ khi mở rộng LSTM lên hàng tỷ tham số, tận dụng các kỹ thuật mới nhất từ các LLM hiện đại, nhưng đồng thời giảm thiểu các hạn chế đã biết của LSTM? Trước tiên, chúng tôi giới thiệu cổng đóng mở mũ (exponential gating) kèm theo các kỹ thuật chuẩn hóa và ổn định phù hợp. Thứ hai, chúng tôi sửa đổi cấu trúc bộ nhớ của LSTM, thu được: (i) sLSTM với bộ nhớ vô hướng, cập nhật vô hướng và trộn bộ nhớ mới, (ii) mLSTM hoàn toàn có thể song song hóa với bộ nhớ ma trận và quy tắc cập nhật hiệp phương sai. Việc tích hợp các phần mở rộng LSTM này vào các khung xương khối dư (residual block backbones) tạo ra các khối xLSTM, sau đó được xếp chồng dư (residually stacked) thành các kiến trúc xLSTM. Cổng đóng mở mũ và các cấu trúc bộ nhớ đã sửa đổi nâng cao khả năng của xLSTM để thực hiện tốt khi so sánh với các Transformer và Mô hình Không gian Trạng thái (State Space Models) tiên tiến nhất, cả về hiệu suất lẫn khả năng mở rộng.
Mô hình này được đóng góp bởi NX-AI. Mã nguồn gốc có thể được tìm thấy tại đây.
Ghi chú
- Sử dụng left padding cho việc tạo batched. Xem Padding side.
xLSTMConfig
lớp transformers.xLSTMConfig
< 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 = 50304hidden_size: int = 4096embedding_dim: int | None = Nonenum_hidden_layers: int = 32num_blocks: int | None = Nonenum_heads: int = 8use_bias: bool = Falsenorm_reduction_force_float32: bool = Truetie_word_embeddings: bool = Falseadd_out_norm: bool = Truenorm_eps: float = 1e-06qk_dim_factor: float = 0.5v_dim_factor: float = 1.0chunkwise_kernel: typing.Literal['chunkwise--native_autograd', 'parallel--native_autograd'] = 'chunkwise--native_autograd'sequence_kernel: typing.Literal['native_sequence__native'] = 'native_sequence__native'step_kernel: typing.Literal['native'] = 'native'mode: typing.Literal['train', 'train_with_padding', 'inference'] = 'inference'chunk_size: int = 64return_last_states: bool = Trueautocast_kernel_dtype: typing.Literal['float32', 'bfloat16', 'float16'] = 'bfloat16'eps: float = 1e-06inference_state_dtype: typing.Literal['float32', 'bfloat16', 'float16'] = 'float32'ffn_proj_factor: float = 2.667ffn_round_up_to_multiple_of: int = 64gate_soft_cap: float = 15.0output_logit_soft_cap: float = 30.0weight_mode: typing.Literal['single', 'fused'] = 'single'use_cache: bool = Truepad_token_id: int | None = 1bos_token_id: int | None = 0eos_token_id: int | list[int] | None = 2max_inference_chunksize: int = 16384 )
Tham số
- vocab_size (
int, tuỳ chọn, mặc định là50304) — Kích thước từ vựng của mô hình. Xác định số lượng token khác nhau có thể được biểu diễn bởiinput_ids. - hidden_size (
int, tùy chọn, mặc định là4096) — Kích thước của các biểu diễn ẩn. - embedding_dim (
int, tùy chọn) — Kích thước của các embedding và trạng thái ẩn. - num_hidden_layers (
int, tùy chọn, mặc định là32) — Số lượng lớp ẩn trong bộ giải mã Transformer. - num_blocks (
int, tùy chọn, tùy chọn, mặc định là 32) — Số lượng khối của mô hình xLSTM, sử dụng num_hidden_layers nếu là None. - num_heads (
int, tùy chọn, tùy chọn, mặc định là 8) — Số lượng heads cho Layer/Cell xLSTM. - use_bias (
bool, tùy chọn, tùy chọn, mặc định làFalse) — Có sử dụng bias trong mô hình xLSTM hay không. - norm_reduction_force_float32 (
bool, tùy chọn, tùy chọn, mặc định làTrue) — Có nên ép buộc phép giảm chuẩn (norm reduction) float32 được thực hiện ở độ chính xác fp32 hay không. - tie_word_embeddings (
bool, tùy chọn, mặc định làFalse) — Có nên gắn kết các trọng số nhúng theo ánh xạtied_weights_keyscủa mô hình hay không. - add_out_norm (
bool, tùy chọn, tùy chọn, mặc định làTrue) — Có thêm một output norm sau các blocks trước LMHead hay không. - norm_eps (
float, tùy chọn, mặc định là1e-06) — Giá trị epsilon được sử dụng bởi các lớp chuẩn hóa lớp (layer normalization). - qk_dim_factor (
float, tùy chọn, tùy chọn, mặc định là 0.5) — Hệ số tỷ lệ cho chiều của query và key. - v_dim_factor (
float, tùy chọn, tùy chọn, mặc định là 1.0) — Hệ số tỷ lệ cho chiều giá trị. - chunkwise_kernel (
ChunkwiseKernelType, tùy chọn, tùy chọn, mặc định là"chunkwise--native_autograd") — Loại kernel cho chế độ xử lý theo từng khối (chunkwise). - sequence_kernel (
SequenceKernelType, tùy chọn, tùy chọn, mặc định là"native_sequence__native") — Loại kernel cho chế độ xử lý chuỗi. - step_kernel (
StepKernelType, tùy chọn, tùy chọn, mặc định là"native") — Loại kernel cho chế độ xử lý bước. - mode (
BackendModeType, tùy chọn, tùy chọn, mặc định là"inference") — Chế độ hoạt động (cần inference để thực hiện generation). - chunk_size (
int, tùy chọn, tùy chọn, mặc định là 64) — Kích thước chunk nội bộ. - return_last_states (
bool, tùy chọn, tùy chọn, mặc định làTrue) — Có nên trả về các trạng thái / bộ nhớ đệm cuối cùng bên trong hay không. Cần đặt là True cho quá trình sinh. - autocast_kernel_dtype (
DtypeType, tùy chọn, tùy chọn, mặc định là"bfloat16") — Dtype của kernel cho các trạng thái. - eps (
float, tùy chọn, mặc định là1e-06) — Giá trị epsilon được sử dụng bởi các lớp chuẩn hóa lớp (layer normalization). - inference_state_dtype (
DtypeType, tùy chọn, tùy chọn, mặc định là"float32") — Dtype của kernel cho các trạng thái trong suy luận. - ffn_proj_factor (
float, tùy chọn, tùy chọn, mặc định là 2.667) — Hệ số kích thước của mạng Feed Forward có cổng sau phép chiếu mở rộng. - ffn_round_up_to_multiple_of (
int, tùy chọn, tùy chọn, mặc định là 64) — Hệ số kích thước làm tròn giá trị của mạng Feed Forward có cổng sau phép chiếu lên (post-up projection). - gate_soft_cap (
float, tùy chọn, tùy chọn, mặc định là 15.0) — Thang độ mềm của cổng (gate soft cap). - output_logit_soft_cap (
float, tùy chọn, tùy chọn, mặc định là 30.0) — Thang độ giới hạn mềm cho logit đầu ra. - weight_mode (
Literal, tùy chọn, mặc định là"single") — Xác định xem các lớp tuyến tính song song có được tách riêng hay hợp nhất (single) hay không. - use_cache (
bool, tùy chọn, mặc định làTrue) — Xác định xem mô hình có nên trả về các chú ý key/values cuối cùng hay không (không được sử dụng bởi tất cả các mô hình). Chỉ liên quan nếuconfig.is_decoder=Truehoặc khi mô hình là mô hình sinh chỉ có decoder. - pad_token_id (
int, tùy chọn, mặc định là1) — Token id được sử dụng để đệm (padding) trong từ vựng. - bos_token_id (
int, tùy chọn, mặc định là0) — Token id được sử dụng cho đầu luồng trong bảng từ vựng. - eos_token_id (
Union[int, list[int]], tùy chọn, mặc định là2) — Token id được sử dụng cho end-of-stream trong bảng từ vựng. - max_inference_chunksize (
int, tùy chọn, tùy chọn, mặc định là 16384) — Giới hạn kích thước chunk cho suy luận để tiết kiệm bộ nhớ.
Đây là lớp cấu hình để lưu trữ cấu hình của một xLSTMModel. Nó được sử dụng để khởi tạo một mô hình Xlstm theo các đối số được chỉ định, xác định kiến trúc của mô hình. Khởi tạo một cấu hình với các giá trị mặc định sẽ tạo ra một cấu hình tương tự như cấu hình của NX-AI/xLSTM-7b
Các đối tượng cấu hình kế thừa từ PreTrainedConfig và có thể được sử dụng để kiểm soát đầu ra của mô hình. Đọc tài liệu từ PreTrainedConfig để biết thêm thông tin.
Ví dụ:
>>> from transformers import xLSTMConfig, xLSTMModel
>>> # Initializing a xLSTM configuration
>>> configuration = xLSTMConfig()
>>> # Initializing a model (with random weights) from the configuration
>>> model = xLSTMModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configxLSTMModel
lớp transformers.xLSTMModel
< source >( config: xLSTMConfig )
Tham số
- config (xLSTMConfig) — Lớp cấu hình mô hình chứa tất cả các tham số của mô hình. Khởi tạo bằng tệp cấu hình sẽ không tải trọng số liên quan đến mô hình, chỉ tải cấu hình. Xem phương thức from_pretrained() để tải trọng số của mô hình.
Mô hình Xlstm cơ bản, xuất ra các trạng thái ẩn thô mà không có bất kỳ đầu (head) cụ thể nào ở phía trên.
Mô hình này kế thừa từ PreTrainedModel. Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các mô hình của nó (chẳng hạn như tải xuống hoặc lưu trữ, thay đổi kích thước các nhúng đầu vào, cắt tỉa các đầu, v.v.)
Mô hình này cũng là một lớp con của torch.nn.Module trong PyTorch. Hãy sử dụng nó như một Module PyTorch thông thường và tham khảo tài liệu PyTorch cho mọi vấn đề liên quan đến cách sử dụng và hành vi chung.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.LongTensor] = Nonecache_params: transformers.models.xlstm.modeling_xlstm.xLSTMCache | None = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → xLSTMOutput or tuple(torch.Tensor)
Tham số
- input_ids (
torch.LongTensorcó dạng(batch_size, sequence_length), tùy chọn) — Chỉ số của các token trong chuỗi đầu vào theo từ điển. Mặc định, padding sẽ bị bỏ qua.Các chỉ số có thể được lấy bằng cách sử dụng AutoTokenizer. Xem PreTrainedTokenizer.encode() và PreTrainedTokenizer.call() để biết thêm chi tiết.
- inputs_embeds (
torch.LongTensorcó hình dạng(batch_size, sequence_length, hidden_size), tùy chọn) — Tùy chọn, thay vì truyềninput_ids, bạn có thể chọn truyền trực tiếp một biểu diễn đã nhúng. Điều này hữu ích nếu bạn muốn kiểm soát nhiều hơn cách chuyển đổi các chỉ sốinput_idsthành các vector tương ứng so với ma trận tra cứu nhúng nội bộ của mô hình. - cache_params (
xLSTMCache, tùy chọn) — xLSTMCache mang các trạng thái RNN. - use_cache (
bool, tùy chọn) — Nếu đặt thànhTrue, các trạng thái key value củapast_key_valuessẽ được trả về và có thể được sử dụng để tăng tốc quá trình giải mã (xempast_key_values).
Trả về
xLSTMOutput hoặc tuple(torch.Tensor)
Một xLSTMOutput hoặc một tuple của
torch.Tensor (nếu return_dict=False được truyền hoặc khi config.return_dict=False) bao gồm các
thành phần khác nhau tùy thuộc vào cấu hình (xLSTMConfig) và đầu vào.
Phương thức forward của xLSTMModel ghi đè lên phương thức đặc biệt __call__.
Mặc dù công thức cho bước truyền tiến cần được định nghĩa bên trong hàm này, người dùng nên gọi instance của
Modulesau đó thay vì gọi hàm này, vì instanceModulesẽ đảm nhận việc thực hiện các bước tiền xử lý và hậu xử lý, trong khi hàm này sẽ lặng lẽ bỏ qua chúng.
last_hidden_state (
torch.Tensorcó hình dạng(batch_size, sequence_length, hidden_size), tùy chọn) — Chuỗi các trạng thái ẩn (hidden-states) tại đầu ra của lớp cuối cùng của mô hình.cache_params (
~models.xlstm.modeling_xlstm.xLSTMCache, optional) — Trạng thái của mô hình tại bước thời gian cuối cùng. Có thể được sử dụng trong phương thức forward vớiinput_idstiếp theo để tránh việc cung cấp lạiinput_idscũ.hidden_states (
tuple[torch.Tensor], tuỳ chọn, được trả về khioutput_hidden_states=Trueđược truyền vào hoặc khiconfig.output_hidden_states=True) — Tuple củatorch.Tensor(một cho đầu ra của embeddings, nếu mô hình có lớp embedding, + một cho đầu ra của mỗi lớp) có hình dạng(batch_size, sequence_length, hidden_size).Trạng thái ẩn của mô hình tại đầu ra của mỗi lớp cùng với các đầu ra embedding ban đầu tùy chọn.
xLSTMLMHeadModel
lớp transformers.xLSTMForCausalLM
< source >( config: xLSTMConfig )
Tham số
- config (xLSTMConfig) — Lớp cấu hình mô hình chứa tất cả các tham số của mô hình. Khởi tạo bằng tệp cấu hình sẽ không tải trọng số liên quan đến mô hình, chỉ tải cấu hình. Xem phương thức from_pretrained() để tải trọng số của mô hình.
Mô hình Xlstm cho mô hình hóa ngôn ngữ nhân quả.
Mô hình này kế thừa từ PreTrainedModel. Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các mô hình của nó (chẳng hạn như tải xuống hoặc lưu trữ, thay đổi kích thước các nhúng đầu vào, cắt tỉa các đầu, v.v.)
Mô hình này cũng là một lớp con của torch.nn.Module trong PyTorch. Hãy sử dụng nó như một Module PyTorch thông thường và tham khảo tài liệu PyTorch cho mọi vấn đề liên quan đến cách sử dụng và hành vi chung.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonecache_params: transformers.models.xlstm.modeling_xlstm.xLSTMCache | None = Nonelabels: typing.Optional[torch.LongTensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → xLSTMCausalLMOutput or tuple(torch.Tensor)
Tham số
- input_ids (
torch.LongTensorcó dạng(batch_size, sequence_length), tùy chọn) — Chỉ số của các token trong chuỗi đầu vào theo từ điển. Mặc định, padding sẽ bị bỏ qua.Các chỉ số có thể được lấy bằng cách sử dụng AutoTokenizer. Xem PreTrainedTokenizer.encode() và PreTrainedTokenizer.call() để biết thêm chi tiết.
- inputs_embeds (
torch.Tensorcó hình dạng(batch_size, sequence_length, hidden_size), tùy chọn) — Tùy chọn, thay vì truyềninput_ids, bạn có thể chọn truyền trực tiếp một biểu diễn nhúng. Điều này hữu ích nếu bạn muốn kiểm soát nhiều hơn cách chuyển đổi các chỉ sốinput_idsthành các vector liên quan so với ma trận tra cứu nhúng nội bộ của mô hình. - cache_params (
xLSTMCache, tùy chọn) — xLSTMCache mang các trạng thái RNN. - labels (
torch.LongTensorcó shape(batch_size, sequence_length), tùy chọn) — Nhãn để tính toán tổn thất mô hình hóa ngôn ngữ có che (masked language modeling loss). Chỉ số phải nằm trong[0, ..., config.vocab_size]hoặc -100 (xem docstring củainput_ids). Các token có chỉ số được đặt thành-100sẽ bị bỏ qua (che), tổn thất chỉ được tính cho các token có nhãn nằm trong[0, ..., config.vocab_size]. - use_cache (
bool, tùy chọn) — Nếu đặt thànhTrue, các trạng thái key value củapast_key_valuessẽ được trả về và có thể được sử dụng để tăng tốc quá trình giải mã (xempast_key_values).
Trả về
xLSTMCausalLMOutput hoặc tuple(torch.Tensor)
Một xLSTMCausalLMOutput hoặc một tuple của
torch.Tensor (nếu return_dict=False được truyền hoặc khi config.return_dict=False) bao gồm các
thành phần khác nhau tùy thuộc vào cấu hình (xLSTMConfig) và đầu vào.
Phương thức forward của xLSTMForCausalLM ghi đè lên phương thức đặc biệt __call__.
Mặc dù công thức cho bước truyền tiến cần được định nghĩa bên trong hàm này, người dùng nên gọi instance của
Modulesau đó thay vì gọi hàm này, vì instanceModulesẽ đảm nhận việc thực hiện các bước tiền xử lý và hậu xử lý, trong khi hàm này sẽ lặng lẽ bỏ qua chúng.
loss (
torch.Tensorcó shape(1,), tùy chọn, được trả về khilabelsđược cung cấp) — Loss của language modeling (cho next-token prediction).logits (
torch.Tensorcó hình dạng(batch_size, sequence_length, config.vocab_size)) — Điểm dự đoán của đầu mô hình hóa ngôn ngữ (điểm cho mỗi token trong từ vựng trước SoftMax).cache_params (
xLSTMCache, tùy chọn, mang các trạng thái RNN) — Trạng thái của mô hình tại bước thời gian cuối cùng. Có thể được sử dụng trong phương thức forward vớiinput_idstiếp theo để tránh việc cung cấp lại cácinput_idscũ.hidden_states (
tuple[torch.Tensor], tuỳ chọn, được trả về khioutput_hidden_states=Trueđược truyền vào hoặc khiconfig.output_hidden_states=True) — Tuple củatorch.Tensor(một cho đầu ra của embeddings, nếu mô hình có lớp embedding, + một cho đầu ra của mỗi lớp) có hình dạng(batch_size, sequence_length, hidden_size).Trạng thái ẩn của mô hình tại đầu ra của mỗi lớp cùng với các đầu ra embedding ban đầu tùy chọn.