Transformers 文档

LLaMA

Hugging Face's logo
加入 Hugging Face 社区

并获得增强型文档体验

开始使用

LLaMA

概述

LLaMA 模型由 Hugo Touvron、Thibaut Lavril、Gautier Izacard、Xavier Martinet、Marie-Anne Lachaux、Timothée Lacroix、Baptiste Rozière、Naman Goyal、Eric Hambro、Faisal Azhar、Aurelien Rodriguez、Armand Joulin、Edouard Grave、Guillaume Lample 在 LLaMA: 开放且高效的基础语言模型 中提出。它是一个基础语言模型的集合,参数范围从 7B 到 65B。

论文摘要如下:

我们介绍了 LLaMA,一个基础语言模型的集合,参数范围从 7B 到 65B。我们用数万亿个 token 训练我们的模型,并表明可以仅使用公开可用的数据集来训练最先进的模型,而无需依赖专有且不可访问的数据集。特别是,LLaMA-13B 在大多数基准测试中优于 GPT-3 (175B),LLaMA-65B 则与最佳模型 Chinchilla-70B 和 PaLM-540B 相当。我们向研究界发布了所有模型。

此模型由 zphang 贡献,并得到 BlackSamorez 的贡献。Hugging Face 中的实现代码基于 GPT-NeoX,可以在 这里 找到。作者的原始代码可以在 这里 找到。

使用技巧

  • LLaMA 模型的权重可以通过填写 此表格 获取。
  • 下载权重后,需要使用 转换脚本 将其转换为 Hugging Face Transformers 格式。可以使用以下命令(示例)调用脚本
python src/transformers/models/llama/convert_llama_weights_to_hf.py \
    --input_dir /path/to/downloaded/llama/weights --model_size 7B --output_dir /output/path
  • 转换后,可以通过以下方式加载模型和分词器
from transformers import LlamaForCausalLM, LlamaTokenizer

tokenizer = LlamaTokenizer.from_pretrained("/output/path")
model = LlamaForCausalLM.from_pretrained("/output/path")

请注意,执行脚本需要足够的 CPU 内存来以 float16 精度托管整个模型(即使最大的版本分为多个检查点,它们都包含模型每个权重的一部分,因此我们需要将它们全部加载到内存中)。因此,对于 65B 模型,需要 130GB 内存。

  • LLaMA 分词器是基于 sentencepiece 的 BPE 模型。sentencepiece 的一个怪癖是,当解码序列时,如果第一个 token 是单词的开头(例如,“Banana”),分词器不会在字符串前面添加前缀空格。

此模型由 zphang 贡献,并得到 BlackSamorez 的贡献。Hugging Face 中的实现代码基于 GPT-NeoX,可以在 这里 找到。作者的原始代码可以在 这里 找到。Flax 版本的实现由 afmck 贡献,实现代码基于 Hugging Face 的 Flax GPT-Neo。

基于原始 LLaMA 模型,Meta AI 发布了一些后续作品

  • Llama2: Llama2 是 Llama 的改进版本,进行了一些架构调整(分组查询注意力),并在 2 万亿个 token 上进行预训练。请参考 Llama2 文档,可以在 这里 找到。

资源

以下列出了官方 Hugging Face 和社区(由 🌎 指示)资源,可帮助您开始使用 LLaMA。如果您有兴趣提交资源以包含在此处,请随时打开一个 Pull Request,我们将对其进行审核!理想情况下,资源应展示一些新内容,而不是重复现有资源。

文本分类
  • 一个有关如何使用提示调整来调整 LLaMA 模型以进行文本分类任务的 笔记本。🌎
问答

⚗️ 优化

  • 一个有关如何在内存有限的 GPU 上使用 xturing 库微调 LLaMA 模型的 笔记本。🌎

⚡️ 推理

  • 一个有关如何使用 🤗 PEFT 库中的 PeftModel 运行 LLaMA 模型的 笔记本。🌎
  • 一个有关如何使用 LangChain 加载 PEFT 适配器 LLaMA 模型的 笔记本。🌎

🚀 部署

  • 一个有关如何使用 🤗 PEFT 库通过直观的 UI 使用 LoRA 方法微调 LLaMA 模型的 笔记本。🌎
  • 一个有关如何在 Amazon SageMaker 上部署 Open-LLaMA 模型以进行文本生成的 笔记本。🌎

LlamaConfig

class transformers.LlamaConfig

< >

( vocab_size = 32000 hidden_size = 4096 intermediate_size = 11008 num_hidden_layers = 32 num_attention_heads = 32 num_key_value_heads = None hidden_act = 'silu' max_position_embeddings = 2048 initializer_range = 0.02 rms_norm_eps = 1e-06 use_cache = True pad_token_id = None bos_token_id = 1 eos_token_id = 2 pretraining_tp = 1 tie_word_embeddings = False rope_theta = 10000.0 rope_scaling = None attention_bias = False attention_dropout = 0.0 mlp_bias = False head_dim = None **kwargs )

参数

  • vocab_size (int, 可选, 默认值为 32000) — LLaMA 模型的词汇量大小。定义了调用 LlamaModel 时传递的 inputs_ids 可以表示的不同词元的数量。
  • hidden_size (int, 可选, 默认值为 4096) — 隐藏表示的维度。
  • intermediate_size (int, 可选, 默认值为 11008) — MLP 表示的维度。
  • num_hidden_layers (int, 可选, 默认值为 32) — Transformer 解码器中的隐藏层数量。
  • num_attention_heads (int, 可选, 默认值为 32) — Transformer 解码器中每个注意力层的注意力头数量。
  • num_key_value_heads (int, 可选) — 这是用于实现分组查询注意力的键值头数量。如果 num_key_value_heads=num_attention_heads,模型将使用多头注意力 (MHA),如果 num_key_value_heads=1,模型将使用多查询注意力 (MQA),否则将使用 GQA。当将多头检查点转换为 GQA 检查点时,每个组键和值头应通过对该组中所有原始头进行平均池化来构建。有关更多详细信息,请查看 这篇论文。如果没有指定,将默认为 num_attention_heads
  • hidden_act (strfunction, 可选, 默认值为 "silu") — 解码器中的非线性激活函数 (函数或字符串)。
  • max_position_embeddings (int, 可选, 默认值为 2048) — 此模型可能使用的最大序列长度。Llama 1 支持最多 2048 个词元,Llama 2 支持最多 4096 个词元,CodeLlama 支持最多 16384 个词元。
  • initializer_range (float, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的截断正态初始化的标准差。
  • rms_norm_eps (float, 可选, 默认为 1e-06) — RMS 归一化层使用的epsilon。
  • use_cache (bool, 可选, 默认为 True) — 模型是否应该返回最后的键值注意力(并非所有模型都使用)。仅在 config.is_decoder=True 时相关。
  • pad_token_id (int, 可选) — 填充 token id。
  • bos_token_id (int, 可选, 默认为 1) — 流的开始 token id。
  • eos_token_id (int, 可选, 默认为 2) — 流的结束 token id。
  • pretraining_tp (int, 可选, 默认为 1) — 实验性功能。预训练期间使用的张量并行等级。请参考 本文件 以了解有关它的更多信息。此值对于确保预训练结果的精确可重复性是必要的。请参考 此问题
  • tie_word_embeddings (bool, 可选, 默认为 False) — 是否绑定权重嵌入
  • rope_theta (float, 可选, 默认为 10000.0) — RoPE 嵌入的基本周期。
  • rope_scaling (Dict, 可选) — 包含 RoPE 嵌入的缩放配置的字典。注意:如果您应用新的 rope 类型并且您希望模型在更长的 max_position_embeddings 上工作,我们建议您相应地更新此值。 预期内容: rope_type (str): 要使用的 RoPE 的子变体。可以是 [‘default’, ‘linear’, ‘dynamic’, ‘yarn’, ‘longrope’, ‘llama3’] 之一,其中 ‘default’ 是原始 RoPE 实现。 factor (float, 可选): 与除 ‘default’ 之外的所有 rope 类型一起使用。应用于 RoPE 嵌入的缩放因子。在大多数缩放类型中,factor 为 x 将使模型能够处理长度为 x * 原始最大预训练长度的序列。 original_max_position_embeddings (int, 可选): 与 ‘dynamic’, ‘longrope’ 和 ‘llama3’ 一起使用。预训练期间使用的原始最大位置嵌入。 attention_factor (float, 可选): 与 ‘yarn’ 和 ‘longrope’ 一起使用。要应用于注意力计算的缩放因子。如果未指定,它将默认为实现建议的值,使用 factor 字段推断建议的值。 beta_fast (float, 可选): 仅与 ‘yarn’ 一起使用。用于设置线性斜坡函数中外推 (仅) 的边界的参数。如果未指定,它将默认为 32。 beta_slow (float, 可选): 仅与 ‘yarn’ 一起使用。用于设置线性斜坡函数中内插 (仅) 的边界的参数。如果未指定,它将默认为 1。 short_factor (List[float], 可选): 仅与 ‘longrope’ 一起使用。要应用于短上下文 (< original_max_position_embeddings) 的缩放因子。必须是与隐藏大小除以注意力头数除以 2 相同长度的数字列表 long_factor (List[float], 可选): 仅与 ‘longrope’ 一起使用。要应用于长上下文 (< original_max_position_embeddings) 的缩放因子。必须是与隐藏大小除以注意力头数除以 2 相同长度的数字列表 low_freq_factor (float, 可选): 仅与 ‘llama3’ 一起使用。应用于 RoPE 的低频成分的缩放因子 high_freq_factor (float, 可选*): 仅与 ‘llama3’ 一起使用。应用于 RoPE 的高频成分的缩放因子
  • attention_bias (bool, 可选, 默认为 False) — 在自注意力机制中,是否在查询、键、值和输出投影层使用偏差。
  • attention_dropout (float, 可选, 默认为 0.0) — 注意力概率的丢弃率。
  • mlp_bias (bool, 可选, 默认为 False) — 是否在 MLP 层中的 up_proj、down_proj 和 gate_proj 层使用偏差。
  • head_dim (int, 可选) — 注意力头维度。 如果为 None,则默认为 hidden_size // num_heads

这是一个配置类,用于存储 LlamaModel 的配置。 它用于根据指定的参数实例化 LLaMA 模型,定义模型架构。 使用默认值实例化配置将生成与 LLaMA-7B 类似的配置。

配置对象继承自 PretrainedConfig 并且可以用来控制模型的输出。 阅读 PretrainedConfig 的文档以获取更多信息。

>>> from transformers import LlamaModel, LlamaConfig

>>> # Initializing a LLaMA llama-7b style configuration
>>> configuration = LlamaConfig()

>>> # Initializing a model from the llama-7b style configuration
>>> model = LlamaModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

LlamaTokenizer

class transformers.LlamaTokenizer

< >

( vocab_file unk_token = '<unk>' bos_token = '<s>' eos_token = '</s>' pad_token = None sp_model_kwargs: Optional = None add_bos_token = True add_eos_token = False clean_up_tokenization_spaces = False use_default_system_prompt = False spaces_between_special_tokens = False legacy = None add_prefix_space = True **kwargs )

参数

  • vocab_file (str) — 词汇表文件路径。
  • unk_token (str or tokenizers.AddedToken, 可选, 默认为 "<unk>") — 未知标记。 不在词汇表中的标记无法转换为 ID,而是设置为该标记。
  • bos_token (str or tokenizers.AddedToken, 可选, 默认为 "<s>") — 预训练期间使用的序列起始标记。 可以用作序列分类标记。
  • eos_token (strtokenizers.AddedToken, 可选, 默认为 "</s>") — 序列结束标记。
  • pad_token (strtokenizers.AddedToken, 可选) — 用于使标记数组大小相同以便进行批处理的特殊标记。 然后将被注意力机制或损失计算忽略。
  • sp_model_kwargs (Dict[str, Any], 可选, 可选) — 将传递给 SentencePieceProcessor.__init__() 方法。 SentencePiece 的 Python 包装器 可以用于设置以下内容,除此之外还有更多功能:

    • enable_sampling: 启用子词正则化。

    • nbest_size: unigram 的采样参数,对于 BPE-Dropout 无效。

      • nbest_size = {0,1}: 不执行采样。
      • nbest_size > 1: 从 nbest_size 个结果中采样。
      • nbest_size < 0: 假设 nbest_size 为无穷大,并使用前向过滤和后向采样算法从所有假设(格)中采样。
    • alpha: unigram 采样的平滑参数,以及 BPE-dropout 的合并操作的丢弃概率。

  • add_bos_token (bool, 可选, 默认为 True) — 是否在序列开头添加 bos_token
  • add_eos_token (bool, 可选, 默认为 False) — 是否在序列末尾添加 eos_token
  • clean_up_tokenization_spaces (bool, 可选, 默认为 False) — 是否在解码后清理空格,清理包括删除潜在的伪影,如多余的空格。
  • use_default_system_prompt (bool, 可选, 默认为 False) — 是否使用 Llama 的默认系统提示。
  • spaces_between_special_tokens (bool, 可选, 默认为 False) — 是否在特殊标记之间添加空格。
  • legacy (bool, 可选) — 是否使用标记器的 legacy 行为。 Legacy 指在合并 #24622 和 #25224 之前的版本,这些版本包含修复以正确处理出现在特殊标记后的标记。 确保还将 from_slow 设置为 True。 一个简单的例子:

    • legacy=True:

构建 Llama 标记器。 基于字节级字节对编码。 默认填充标记未设置,因为原始模型中没有填充标记。

build_inputs_with_special_tokens

< >

( token_ids_0 token_ids_1 = None )

get_special_tokens_mask

< >

( token_ids_0: List token_ids_1: Optional = None already_has_special_tokens: bool = False ) List[int]

参数

  • token_ids_0 (List[int]) — ID 列表。
  • token_ids_1 (List[int], 可选) — 用于序列对的可选第二个 ID 列表。
  • already_has_special_tokens (bool, 可选, 默认值为 False) — 令牌列表是否已使用模型的特殊令牌进行格式化。

返回

List[int]

一个范围在 [0, 1] 内的整数列表:1 表示特殊令牌,0 表示序列令牌。

从没有添加特殊令牌的令牌列表中检索序列 ID。当使用分词器 prepare_for_model 方法添加特殊令牌时,会调用此方法。

create_token_type_ids_from_sequences

< >

( token_ids_0: List token_ids_1: Optional = None ) List[int]

参数

  • token_ids_0 (List[int]) — ID 列表。
  • token_ids_1 (List[int], 可选) — 用于序列对的可选第二个 ID 列表。

返回

List[int]

根据给定的序列创建 令牌类型 ID 列表。

从传递的两个序列中创建掩码,用于序列对分类任务。ALBERT

序列对掩码具有以下格式

0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1
| first sequence    | second sequence |

如果 token_ids_1 为 None,则仅返回掩码的第一部分 (0)。

save_vocabulary

< >

( save_directory filename_prefix: Optional = None ) Tuple(str)

参数

  • save_directory (str) — 保存词汇表的目录。

返回

Tuple(str)

保存文件的路径。

将词汇表和特殊令牌文件保存到目录中。

LlamaTokenizerFast

class transformers.LlamaTokenizerFast

< >

( vocab_file = None tokenizer_file = None clean_up_tokenization_spaces = False unk_token = '<unk>' bos_token = '<s>' eos_token = '</s>' add_bos_token = True add_eos_token = False use_default_system_prompt = False legacy = None add_prefix_space = None **kwargs )

参数

  • vocab_file (str, 可选) — SentencePiece 文件(通常以 .model 结尾),其中包含实例化标记器的所需词汇表。
  • tokenizer_file (str, 可选) — tokenizers 文件(通常以 .json 结尾),其中包含加载标记器所需的一切。
  • clean_up_tokenization_spaces (bool, 可选,默认值为 False) — 是否清理解码后的空格,清理包括删除潜在的伪影,例如多余的空格。
  • unk_token (strtokenizers.AddedToken, 可选,默认值为 "<unk>") — 未知标记。词汇表中没有的标记无法转换为 ID,而设置为此标记。
  • bos_token (strtokenizers.AddedToken, 可选,默认值为 "<s>") — 预训练期间使用的序列开始标记。可以用作序列分类标记。
  • eos_token (strtokenizers.AddedToken, 可选,默认值为 "</s>") — 序列结束标记。
  • add_bos_token (bool, 可选,默认值为 True) — 是否在序列开头添加 bos_token
  • use_default_system_prompt (bool, 可选, 默认值为 False) — 是否使用 Llama 的默认系统提示
  • legacy (bool, 可选) — 是否使用标记器的 legacy 行为。Legacy 是在合并 #24622 和 #25224 之前的版本,其中包含修复了正确处理出现在特殊标记后的标记的问题。确保将 from_slow 设置为 True。一个简单的例子:

    • legacy=True:

构建 Llama 标记器。基于字节级的字节对编码。

这使用了 ByteFallback,并且不进行规范化。

>>> from transformers import LlamaTokenizerFast

>>> tokenizer = LlamaTokenizerFast.from_pretrained("hf-internal-testing/llama-tokenizer")
>>> tokenizer.encode("Hello this is a test")
[1, 15043, 445, 338, 263, 1243]

如果你想要更改 bos_tokeneos_token,请确保在初始化模型时指定它们,或者调用 tokenizer.update_post_processor() 来确保正确地进行后处理(否则编码序列的第一个标记和最后一个标记的值将不正确)。有关更多详细信息,请查看 [后处理程序] (https://huggingface.co/docs/tokenizers/api/post-processors) 文档。

此标记器继承自 PreTrainedTokenizerFast,其中包含大多数主要方法。用户应参考此超类以获取有关这些方法的更多信息。

build_inputs_with_special_tokens

< >

( token_ids_0 token_ids_1 = None )

get_special_tokens_mask

< >

( token_ids_0: List token_ids_1: Optional = None already_has_special_tokens: bool = False ) 一个范围在 [0, 1] 内的整数列表

参数

  • token_ids_0 (List[int]) — 第一个序列的 ID 列表。
  • token_ids_1 (List[int], 可选) — 第二个序列的 ID 列表。
  • already_has_special_tokens (bool, 可选, 默认值为 False) — 标记列表是否已经使用模型的特殊标记进行格式化。

返回

一个范围在 [0, 1] 内的整数列表

特殊标记为 1,序列标记为 0。

从没有添加特殊标记的标记列表中检索序列 ID。当使用标记器 prepare_for_modelencode_plus 方法添加特殊标记时,会调用此方法。

create_token_type_ids_from_sequences

< >

( token_ids_0: List token_ids_1: Optional = None ) List[int]

参数

  • token_ids_0 (List[int]) — 第一个标记化的序列。
  • token_ids_1 (List[int], 可选) — 第二个被标记化的序列。

返回

List[int]

标记类型 ID。

创建对应于传递序列的标记类型 ID。 什么是标记类型 ID?

如果模型有特殊构建方式,则应在子类中覆盖。

update_post_processor

< >

( )

使用当前的 bos_tokeneos_token 更新底层的后期处理程序。

save_vocabulary

< >

( save_directory: str filename_prefix: Optional = None )

LlamaModel

class transformers.LlamaModel

< >

( config: LlamaConfig )

参数

  • config (LlamaConfig) — 模型配置类,包含模型的所有参数。 使用配置文件进行初始化不会加载与模型相关的权重,只会加载配置。 查看 from_pretrained() 方法以加载模型权重。 config — LlamaConfig

输出原始隐藏状态的裸 LLaMA 模型,没有在顶部添加任何特定头。 此模型继承自 PreTrainedModel。 查看超类文档以了解库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入的大小、修剪头等)。

此模型也是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参考 PyTorch 文档了解与一般使用和行为有关的所有事项。

config.num_hidden_layers 层组成的 Transformer 解码器。 每一层都是一个 LlamaDecoderLayer

forward

< >

( input_ids: LongTensor = None attention_mask: Optional = None position_ids: Optional = None past_key_values: Union = None inputs_embeds: Optional = None use_cache: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None cache_position: Optional = None )

参数

  • input_ids (torch.LongTensor 形状为 (batch_size, sequence_length)) — 词汇表中输入序列标记的索引。 如果您提供填充,默认情况下将忽略填充。

    索引可以使用 AutoTokenizer 获取。 查看 PreTrainedTokenizer.encode()PreTrainedTokenizer.call() 以了解详细信息。

    什么是输入 ID?

  • attention_mask (torch.Tensor 形状为 (batch_size, sequence_length), 可选) — 用于避免对填充标记索引执行注意力的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示未掩码的标记,
    • 0 表示掩码的标记。

    什么是注意力掩码?

    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    如果使用 past_key_values,则可以选择仅输入最后一个 input_ids(请参阅 past_key_values)。

    如果您想更改填充行为,则应阅读 modeling_opt._prepare_decoder_attention_mask 并根据您的需要进行修改。有关默认策略的更多信息,请参阅 论文 中的图表 1。

    • 1 表示头部未掩码
    • 0 表示头部掩码
  • position_ids (torch.LongTensor 形状为 (batch_size, sequence_length), 可选) — 位置嵌入中每个输入序列标记的位置索引。在 [0, config.n_positions - 1] 范围内选择。

    什么是位置 ID?

  • past_key_values (Cachetuple(tuple(torch.FloatTensor)), 可选) — 预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常包含在模型在解码的先前阶段返回的 past_key_values 中,当 use_cache=Trueconfig.use_cache=True 时。

    允许两种格式:

    • 一个 Cache 实例,请参阅我们的 kv 缓存指南
    • 长度为 config.n_layerstuple(torch.FloatTensor) 元组,每个元组都有 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量。这也被称为传统缓存格式。

    模型将输出与输入相同的缓存格式。如果没有传递 past_key_values,则将返回传统缓存格式。

    如果使用 past_key_values,则用户可以选择仅输入最后一个 input_ids(那些没有将其过去键值状态传递给此模型的 input_ids)形状为 (batch_size, 1),而不是所有形状为 (batch_size, sequence_length)input_ids

  • inputs_embeds (torch.FloatTensor 形状为 (batch_size, sequence_length, hidden_size), 可选) — 可选地,您可以选择直接传递嵌入表示,而不是传递 input_ids。如果您想比模型的内部嵌入查找矩阵更精确地控制如何将 input_ids 索引转换为关联向量,这将非常有用。
  • use_cache (bool, 可选) — 如果设置为 True,则返回 past_key_values 键值状态,可用于加速解码(请参阅 past_key_values)。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。有关详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。
  • cache_position (torch.LongTensor 形状为 (sequence_length), 可选) — 表示输入序列标记在序列中的位置的索引。与 position_ids 相反,此张量不受填充的影响。它用于在正确的位置更新缓存并推断完整的序列长度。

The LlamaModel forward method, overrides the __call__ special method.

虽然前向传播的配方需要在此函数内定义,但应在之后调用Module实例,而不是此函数,因为前者负责运行前处理和后处理步骤,而后者则默默地忽略它们。

LlamaForCausalLM

class transformers.LlamaForCausalLM

< >

( config )

forward

< >

( input_ids: LongTensor = None attention_mask: Optional = None position_ids: Optional = None past_key_values: Union = None inputs_embeds: Optional = None labels: Optional = None use_cache: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None cache_position: Optional = None num_logits_to_keep: int = 0 ) transformers.modeling_outputs.CausalLMOutputWithPast or tuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor 形状为 (batch_size, sequence_length)) — 词汇表中输入序列标记的索引。如果您提供填充,默认情况下将忽略填充。

    索引可以使用 AutoTokenizer 获取。有关详细信息,请参见 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • attention_mask (torch.Tensor 形状为 (batch_size, sequence_length), 可选) — 掩码,用于避免对填充标记索引执行注意力。在 [0, 1] 中选择的掩码值:

    • 1 用于未掩码的标记,
    • 0 用于掩码的标记。

    什么是注意力掩码?

    索引可以使用 AutoTokenizer 获取。有关详细信息,请参见 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    如果使用 past_key_values,则可选地只需要输入最后一个 input_ids(参见 past_key_values)。

    如果您想更改填充行为,您应该阅读 modeling_opt._prepare_decoder_attention_mask 并根据您的需要进行修改。有关默认策略的更多信息,请参见 论文 中的图表 1。

    • 1 表示头未掩码
    • 0 表示头掩码
  • position_ids (torch.LongTensor 形状为 (batch_size, sequence_length), 可选) — 位置嵌入中每个输入序列标记的位置索引。在 [0, config.n_positions - 1] 范围内选择。

    什么是位置 ID?

  • past_key_values (Cachetuple(tuple(torch.FloatTensor)), 可选) — 预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。 这通常包括模型在解码的先前阶段返回的 past_key_values,当 use_cache=Trueconfig.use_cache=True 时。

    允许两种格式:

    • 一个 Cache 实例,请参阅我们的 kv 缓存指南
    • 长度为 config.n_layerstuple(tuple(torch.FloatTensor)),每个元组具有两个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量)。 这也被称为传统缓存格式。

    模型将输出与输入相同的缓存格式。 如果没有传递 past_key_values,则将返回传统缓存格式。

    如果使用 past_key_values,用户可以选择仅输入形状为 (batch_size, 1) 的最后一个 input_ids(那些没有将过去键值状态提供给此模型的 input_ids),而不是所有形状为 (batch_size, sequence_length)input_ids

  • inputs_embeds (形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor, 可选) — 可选地,您可以选择直接传递嵌入表示,而不是传递 input_ids。 如果你想比模型的内部嵌入查找矩阵更好地控制如何将 input_ids 索引转换为关联的向量,这很有用。
  • use_cache (bool, 可选) — 如果设置为 True,则会返回 past_key_values 键值状态,并可用于加速解码(请参阅 past_key_values)。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。 有关更多详细信息,请参阅返回张量中的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。 有关更多详细信息,请参阅返回张量中的 hidden_states
  • return_dict (bool, 可选) — 是否返回一个 ModelOutput 而不是一个普通元组。
  • cache_position (形状为 (sequence_length)torch.LongTensor, 可选) — 指示输入序列标记在序列中的位置的索引。 与 position_ids 不同,此张量不受填充的影响。 它用于在正确的位置更新缓存并推断完整的序列长度。

    参数 — labels (形状为 (batch_size, sequence_length)torch.LongTensor, 可选): 用于计算掩码语言建模损失的标签。 索引应在 [0, ..., config.vocab_size] 或 -100 中(请参阅 input_ids 文档字符串)。 索引设置为 -100 的标记将被忽略(掩码),损失仅针对标签在 [0, ..., config.vocab_size] 中的标记进行计算。

    num_logits_to_keep (int, 可选): 计算最后 num_logits_to_keep 个标记的 logits。 如果为 0,则计算所有 input_ids 的 logits(特殊情况)。 生成只需要最后一个标记的 logits,并且仅为该标记计算它们可以节省内存,这对于长序列或大型词汇量来说非常重要。

返回

transformers.modeling_outputs.CausalLMOutputWithPasttuple(torch.FloatTensor)

一个 transformers.modeling_outputs.CausalLMOutputWithPast 或一个 torch.FloatTensor 元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),包含根据配置 (LlamaConfig) 和输入的不同元素。

  • loss (形状为 (1,)torch.FloatTensor, 可选,在提供 labels 时返回) — 语言建模损失(用于下一个标记预测)。

  • logits (形状为 (batch_size, sequence_length, config.vocab_size)torch.FloatTensor) — 语言建模头的预测分数(在 SoftMax 之前的每个词汇标记的分数)。

  • past_key_values (tuple(tuple(torch.FloatTensor)), 可选,在传递 use_cache=True 或当 config.use_cache=True 时返回) — 长度为 config.n_layerstuple(tuple(torch.FloatTensor)),每个元组具有两个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量。

    包含预先计算的隐藏状态(自注意力块中的键和值),可用于(请参阅 past_key_values 输入)加速顺序解码。

  • hidden_states (tuple(torch.FloatTensor), 可选,在传递 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — torch.FloatTensor 元组(一个用于嵌入的输出,如果模型具有嵌入层,加上一个用于每个层的输出),形状为 (batch_size, sequence_length, hidden_size)

    模型在每个层的输出处的隐藏状态,以及可选的初始嵌入输出。

  • attentions (tuple(torch.FloatTensor), 可选,在传递 output_attentions=True 或当 config.output_attentions=True 时返回) — torch.FloatTensor 元组(每个层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。

The LlamaForCausalLM forward method, overrides the __call__ special method.

虽然前向传播的配方需要在此函数内定义,但应在之后调用Module实例,而不是此函数,因为前者负责运行前处理和后处理步骤,而后者则默默地忽略它们。

Example

>>> from transformers import AutoTokenizer, LlamaForCausalLM

>>> model = LlamaForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf")
>>> tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-hf")

>>> 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."

LlamaForSequenceClassification

class transformers.LlamaForSequenceClassification

< >

( config )

参数

  • config (LlamaConfig) — 模型配置类,包含模型的所有参数。使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法来加载模型权重。

LLaMa 模型转换器,顶部带有一个序列分类头(线性层)。

LlamaForSequenceClassification 使用最后一个 token 进行分类,就像其他因果模型(例如 GPT-2)一样。

由于它对最后一个 token 进行分类,因此需要知道最后一个 token 的位置。如果配置中定义了 pad_token_id,它会在每行找到不是填充 token 的最后一个 token。如果未定义 pad_token_id,它只会获取批次中每行中的最后一个值。由于它无法在传递 inputs_embeds 而不是 input_ids 时猜测填充 token,因此它会执行相同的操作(获取批次中每行中的最后一个值)。

此模型继承自 PreTrainedModel。查看超类文档以了解库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头等)。

此模型也是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参考 PyTorch 文档了解与一般使用和行为有关的所有事项。

forward

< >

( input_ids: Optional = None attention_mask: Optional = None position_ids: Optional = None past_key_values: Union = None inputs_embeds: Optional = None labels: Optional = None use_cache: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None )

参数

  • input_ids (torch.LongTensor 形状为 (batch_size, sequence_length)) — 输入序列 token 在词汇表中的索引。如果提供填充,默认情况下将忽略填充。

    索引可以使用 AutoTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • attention_mask (torch.Tensor 形状为 (batch_size, sequence_length)可选) — 掩码,用于避免对填充 token 索引执行注意力。掩码值在 [0, 1] 中选择:

    • 1 表示未掩码的 token,
    • 0 表示掩码的 token。

    什么是注意力掩码?

    索引可以使用 AutoTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    如果使用 past_key_values,可以选择性地仅输入最后一个 input_ids(那些没有为该模型提供过去键值状态的 input_ids),形状为 (batch_size, 1),而不是所有 input_ids,形状为 (batch_size, sequence_length)

    如果要更改填充行为,应阅读 modeling_opt._prepare_decoder_attention_mask 并修改为您的需求。有关默认策略的更多信息,请参阅 论文 中的图 1。

    • 1 表示头未掩码
    • 0 表示头掩码
  • position_ids (torch.LongTensor 形状为 (batch_size, sequence_length)可选) — 输入序列 token 在位置嵌入中的位置索引。在 [0, config.n_positions - 1] 范围内选择。

    什么是位置 ID?

  • past_key_values (Cachetuple(tuple(torch.FloatTensor))可选) — 预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常包括模型在解码先前阶段返回的 past_key_values,当 use_cache=Trueconfig.use_cache=True 时。

    允许两种格式:

    • 一个 Cache 实例,请参阅我们的 kv 缓存指南;
    • 长度为 config.n_layerstuple(torch.FloatTensor) 元组,每个元组包含 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量。这也被称为传统缓存格式。

    模型将输出与输入相同格式的缓存。如果未传递 past_key_values,则将返回传统缓存格式。

    如果使用 past_key_values,用户可以选择性地仅输入最后一个 input_ids(那些没有为该模型提供过去键值状态的 input_ids),形状为 (batch_size, 1),而不是所有 input_ids,形状为 (batch_size, sequence_length)

  • inputs_embeds (torch.FloatTensor 形状为 (batch_size, sequence_length, hidden_size)可选) — 可选地,您可以选择直接传递嵌入表示,而不是传递 input_ids。如果您想对如何将 input_ids 索引转换为关联向量进行更多控制,而不是模型的内部嵌入查找矩阵,这将非常有用。
  • use_cache (bool可选) — 如果设置为 True,则返回 past_key_values 键值状态,可用于加速解码(参见 past_key_values)。
  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool可选) — 是否返回 ModelOutput 而不是普通元组。
  • cache_position (torch.LongTensor 形状为 (sequence_length)可选) — 表示输入序列令牌在序列中的位置的索引。与 position_ids 不同,该张量不受填充的影响。它用于在正确的位置更新缓存并推断完整的序列长度。
  • labels (torch.LongTensor 形状为 (batch_size,)可选) — 用于计算序列分类/回归损失的标签。索引应在 [0, ..., config.num_labels - 1] 中。如果 config.num_labels == 1,则计算回归损失(均方损失),如果 config.num_labels > 1,则计算分类损失(交叉熵)。

The LlamaForSequenceClassification forward method, overrides the __call__ special method.

虽然前向传播的配方需要在此函数内定义,但应在之后调用Module实例,而不是此函数,因为前者负责运行前处理和后处理步骤,而后者则默默地忽略它们。

LlamaForQuestionAnswering

class transformers.LlamaForQuestionAnswering

< >

( config )

参数

  • config (LlamaConfig) — 模型配置类,包含模型的所有参数。使用配置文件初始化不会加载与模型关联的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。

Llama 模型转换器,顶部带有跨度分类头,用于提取式问答任务,如 SQuAD(在隐藏状态输出之上有一个线性层,用于计算 span start logitsspan end logits)。

此模型继承自 PreTrainedModel。查看超类文档以了解库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头等)。

此模型也是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参考 PyTorch 文档了解与一般使用和行为有关的所有事项。

forward

  • input_ids (torch.LongTensor 形状为 (batch_size, sequence_length)) — 词汇表中输入序列标记的索引。如果您提供填充,默认情况下将忽略填充。

    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • attention_mask (torch.Tensor 形状为 (batch_size, sequence_length)可选) — 用于避免对填充标记索引执行注意的掩码。在 [0, 1] 中选择掩码值:

    • 1 表示未被掩盖的标记,
    • 0 表示被掩盖的标记。

    什么是注意力掩码?

    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    如果使用 past_key_values,可以选择只输入最后一个 input_ids(那些没有被输入到此模型的过去键值状态)形状为 (batch_size, 1),而不是所有形状为 (batch_size, sequence_length)input_ids

    如果您想更改填充行为,您应该阅读 modeling_opt._prepare_decoder_attention_mask 并根据您的需求进行修改。有关默认策略的更多信息,请参阅 论文 中的图 1。

    • 1 表示头部未被掩盖
    • 0 表示头部被掩盖
  • position_ids (torch.LongTensor 形状为 (batch_size, sequence_length)可选) — 位置嵌入中每个输入序列标记的位置索引。在 [0, config.n_positions - 1] 范围内选择。

    什么是位置 ID?

  • past_key_values (Cachetuple(tuple(torch.FloatTensor))可选) — 预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加快顺序解码速度。这通常包括在模型解码的先前阶段返回的 past_key_values,当 use_cache=Trueconfig.use_cache=True 时。

    允许两种格式:

    • 一个 Cache 实例,请参阅我们的 kv 缓存指南
    • 长度为 config.n_layerstuple(tuple(torch.FloatTensor)),每个元组包含 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量。这也被称为传统缓存格式。

    模型将输出与输入相同格式的缓存。如果未传递 past_key_values,将返回传统缓存格式。

    如果使用 past_key_values,用户可以选择只输入最后一个 input_ids(那些没有被输入到此模型的过去键值状态)形状为 (batch_size, 1),而不是所有形状为 (batch_size, sequence_length)input_ids

  • inputs_embeds (torch.FloatTensor 形状为 (batch_size, sequence_length, hidden_size)可选) — 可选地,您可以选择直接传递嵌入式表示,而不是传递 input_ids。如果您想更多地控制如何将 input_ids 索引转换为相关的向量,而不是模型内部的嵌入查找矩阵,这将很有用。
  • use_cache (bool可选) — 如果设置为 True,将返回 past_key_values 键值状态,可用于加快解码速度(请参阅 past_key_values)。
  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。有关详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。有关详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。
  • cache_position (torch.LongTensor 形状为 (sequence_length), 可选) — 指示输入序列令牌在序列中的位置的索引。与 position_ids 相反,该张量不受填充的影响。它用于在正确的位置更新缓存并推断完整的序列长度。
  • start_positions (torch.LongTensor 形状为 (batch_size,), 可选) — 用于计算令牌分类损失的标记跨度开始位置(索引)的标签。位置被限制到序列的长度(sequence_length)。序列之外的位置不会被考虑用于计算损失。
  • end_positions (torch.LongTensor 形状为 (batch_size,), 可选) — 用于计算令牌分类损失的标记跨度结束位置(索引)的标签。位置被限制到序列的长度(sequence_length)。序列之外的位置不会被考虑用于计算损失。

LlamaForQuestionAnswering 正向方法重写了 __call__ 特殊方法。

虽然前向传播的配方需要在此函数内定义,但应在之后调用Module实例,而不是此函数,因为前者负责运行前处理和后处理步骤,而后者则默默地忽略它们。

LlamaForTokenClassification

class transformers.LlamaForTokenClassification

< >

( config )

参数

  • config (LlamaConfig) — 模型配置类,包含模型的所有参数。使用配置文件进行初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法来加载模型权重。

具有令牌分类头的 Llama 模型转换器(在隐藏状态输出之上有一个线性层),例如用于命名实体识别 (NER) 任务。

此模型继承自 PreTrainedModel。查看超类文档以了解库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头等)。

此模型也是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参考 PyTorch 文档了解与一般使用和行为有关的所有事项。

forward

< >

( input_ids: Optional = None attention_mask: Optional = None position_ids: Optional = None past_key_values: Optional = None inputs_embeds: Optional = None labels: Optional = None use_cache: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None )

参数

  • input_ids (torch.LongTensor 形状为 (batch_size, sequence_length)) — 词汇表中输入序列标记的索引。如果您提供填充,默认情况下将忽略填充。

    索引可以使用 AutoTokenizer 获得。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • attention_mask (torch.Tensor 形状为 (batch_size, sequence_length)可选) — 掩码,避免对填充标记索引执行注意力。掩码值在 [0, 1] 中选择:

    • 1 表示未掩码的标记,
    • 0 表示掩码的标记。

    什么是注意力掩码?

    索引可以使用 AutoTokenizer 获得。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    如果使用 past_key_values,则可以选择仅输入最后一个 input_ids(参见 past_key_values)。

    如果您想更改填充行为,您应该阅读 modeling_opt._prepare_decoder_attention_mask 并根据您的需要进行修改。有关默认策略的更多信息,请参阅 论文 中的图表 1。

    • 1 表示头未掩码
    • 0 表示头掩码
  • position_ids (torch.LongTensor 形状为 (batch_size, sequence_length)可选) — 位置嵌入中每个输入序列标记的位置索引。在 [0, config.n_positions - 1] 范围内选择。

    什么是位置 ID?

  • past_key_values (Cachetuple(tuple(torch.FloatTensor))可选) — 预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加快顺序解码速度。这通常包括模型在解码的先前阶段返回的 past_key_values,当 use_cache=Trueconfig.use_cache=True 时。

    允许两种格式:

    • 一个 Cache 实例,请参阅我们的 kv 缓存指南
    • tuple(torch.FloatTensor) 的元组,长度为 config.n_layers,每个元组包含 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量)。这也称为传统缓存格式。

    模型将输出与输入相同的缓存格式。如果没有传递 past_key_values,将返回传统缓存格式。

    如果使用 past_key_values,用户可以选择仅输入最后一个 input_ids(其 past key value 状态未提供给此模型)的形状为 (batch_size, 1),而不是所有 input_ids 的形状为 (batch_size, sequence_length)

  • inputs_embeds (torch.FloatTensor 形状为 (batch_size, sequence_length, hidden_size)可选) — 可选地,而不是传递 input_ids,您可以选择直接传递嵌入表示。如果您希望比模型的内部嵌入查找矩阵更精细地控制如何将 input_ids 索引转换为关联的向量,这将很有用。
  • use_cache (bool可选) — 如果设置为 True,则返回 past_key_values 键值状态,可用于加快解码速度(参见 past_key_values)。
  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量中的 attentions
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量中的 hidden_states
  • return_dict (bool可选) — 是否返回一个 ModelOutput 而不是一个简单的元组。
  • cache_position (torch.LongTensor 形状为 (sequence_length)可选) — 表示输入序列token在序列中的位置的索引。与 position_ids 相反,该张量不受填充的影响。它用于在正确的位置更新缓存,并推断完整的序列长度。
  • labels (torch.LongTensor 形状为 (batch_size,)可选) — 用于计算序列分类/回归损失的标签。索引应在 [0, ..., config.num_labels - 1] 内。如果 config.num_labels == 1,则计算回归损失(均方损失),如果 config.num_labels > 1,则计算分类损失(交叉熵)。

The LlamaForTokenClassification forward method, overrides the __call__ special method.

虽然前向传播的配方需要在此函数内定义,但应在之后调用Module实例,而不是此函数,因为前者负责运行前处理和后处理步骤,而后者则默默地忽略它们。

FlaxLlamaModel

class transformers.FlaxLlamaModel

< >

( config: LlamaConfig input_shape: Tuple = (1, 1) seed: int = 0 dtype: dtype = <class 'jax.numpy.float32'> _do_init: bool = True **kwargs )

参数

  • config (LlamaConfig) — 模型配置类,包含模型的所有参数。使用配置文件初始化不会加载与模型关联的权重,只加载配置。查看 from_pretrained() 方法加载模型权重。
  • dtype (jax.numpy.dtype可选,默认为 jax.numpy.float32) — 计算的数据类型。可以是 jax.numpy.float32jax.numpy.float16jax.numpy.bfloat16 之一。

    这可以用来在 GPU 或 TPU 上启用混合精度训练或半精度推理。如果指定,所有计算将使用给定的 dtype 执行。

    注意,这只会指定计算的 dtype,不会影响模型参数的 dtype。

    如果你想改变模型参数的 dtype,请参见 to_fp16()to_bf16().

The bare Llama Model transformer outputting raw hidden-states without any specific head on top.

This model inherits from FlaxPreTrainedModel. Check the superclass documentation for the generic methods the library implements for all its model (such as downloading or saving, resizing the input embeddings, pruning heads etc.)

This model is also a Flax Linen flax.nn.Module subclass. Use it as a regular Flax Module and refer to the Flax documentation for all matter related to general usage and behavior.

Finally, this model supports inherent JAX features such as

__call__

< >

( input_ids attention_mask = None position_ids = None params: dict = None past_key_values: dict = None dropout_rng: PRNGKey = None train: bool = False output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) transformers.modeling_flax_outputs.FlaxBaseModelOutput or tuple(torch.FloatTensor)

参数

  • input_ids (numpy.ndarray 形状为 (batch_size, input_ids_length)) — 词汇表中输入序列标记的索引。如果您提供填充,默认情况下将忽略填充。

    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • attention_mask (numpy.ndarray 形状为 (batch_size, sequence_length)可选) — 用于避免对填充标记索引执行注意的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示未屏蔽的标记,
    • 0 表示屏蔽的标记。

    什么是注意力掩码?

    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    如果您使用 past_key_values,则可以选择仅输入最后一个 decoder_input_ids(请参阅 past_key_values)。

    如果您想更改填充行为,您应该阅读 modeling_opt._prepare_decoder_attention_mask 并根据您的需要进行修改。有关默认策略的更多信息,请参阅 论文 中的图表 1。

    • 1 表示头未屏蔽
    • 0 表示头屏蔽
  • position_ids (numpy.ndarray 形状为 (batch_size, sequence_length)可选) — 位置嵌入中每个输入序列标记的位置索引。在 [0, config.n_positions - 1] 范围内选择。

    什么是位置 ID?

  • past_key_values (Dict[str, np.ndarray]可选,由 init_cache 返回或在传递之前的 past_key_values 时返回) — 预先计算的隐藏状态字典(注意块中的键和值),可用于快速自动回归解码。预先计算的键和值隐藏状态的形状为 [batch_size, max_length]
  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量中的 attentions
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量中的 hidden_states
  • return_dict (bool可选) — 是否返回 ModelOutput 而不是普通元组。

返回

transformers.modeling_flax_outputs.FlaxBaseModelOutputtuple(torch.FloatTensor)

一个 transformers.modeling_flax_outputs.FlaxBaseModelOutput 或一个 torch.FloatTensor 元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),包含取决于配置 (LlamaConfig) 和输入的各种元素。

  • last_hidden_state (jnp.ndarray 形状为 (batch_size, sequence_length, hidden_size)) — 模型最后一层的输出处的隐藏状态序列。

  • hidden_states (tuple(jnp.ndarray)可选,在传递 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — jnp.ndarray 的元组(一个用于嵌入的输出 + 一个用于每一层的输出),形状为 (batch_size, sequence_length, hidden_size)

    每一层的模型输出处的隐藏状态加上初始嵌入输出。

  • attentions (tuple(jnp.ndarray)可选,在传递 output_attentions=True 或当 config.output_attentions=True 时返回) — jnp.ndarray 的元组(每一层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。

FlaxLlamaPreTrainedModel 正向方法覆盖了 __call__ 特殊方法。

虽然前向传播的配方需要在此函数内定义,但应在之后调用Module实例,而不是此函数,因为前者负责运行前处理和后处理步骤,而后者则默默地忽略它们。

此示例使用随机模型,因为真实模型都非常大。要获得正确的结果,您应该使用 openlm-research/open_llama_3b_v2 而不是 afmck/testing-llama-tiny。如果您在加载该检查点时出现内存不足,您可以在 from_pretrained 调用中尝试添加 device_map="auto"

Example

>>> from transformers import AutoTokenizer, FlaxLlamaModel

>>> tokenizer = AutoTokenizer.from_pretrained("afmck/testing-llama-tiny")
>>> model = FlaxLlamaModel.from_pretrained("afmck/testing-llama-tiny")

>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="jax")
>>> outputs = model(**inputs)

>>> last_hidden_states = outputs.last_hidden_state

FlaxLlamaForCausalLM

class transformers.FlaxLlamaForCausalLM

< >

( config: LlamaConfig input_shape: Tuple = (1, 1) seed: int = 0 dtype: dtype = <class 'jax.numpy.float32'> _do_init: bool = True **kwargs )

参数

  • config (LlamaConfig) — 模型配置类,包含模型的所有参数。 使用配置文件初始化不会加载与模型关联的权重,只会加载配置。 查看 from_pretrained() 方法来加载模型权重。
  • dtype (jax.numpy.dtype, 可选, 默认值为 jax.numpy.float32) — 计算的数据类型。 可以是 jax.numpy.float32jax.numpy.float16jax.numpy.bfloat16 之一。

    这可用于在 GPU 或 TPU 上启用混合精度训练或半精度推理。 如果指定,所有计算将使用给定的 dtype 执行。

    注意,这仅指定计算的 dtype,不影响模型参数的 dtype。

    如果您希望更改模型参数的 dtype,请参阅 to_fp16()to_bf16()

带有语言建模头(线性层)的 Llama 模型 Transformer。

This model inherits from FlaxPreTrainedModel. Check the superclass documentation for the generic methods the library implements for all its model (such as downloading or saving, resizing the input embeddings, pruning heads etc.)

This model is also a Flax Linen flax.nn.Module subclass. Use it as a regular Flax Module and refer to the Flax documentation for all matter related to general usage and behavior.

Finally, this model supports inherent JAX features such as

__call__

< >

( input_ids attention_mask = None position_ids = None params: dict = None past_key_values: dict = None dropout_rng: PRNGKey = None train: bool = False output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) transformers.modeling_flax_outputs.FlaxMaskedLMOutputtuple(torch.FloatTensor)

参数

  • input_ids (numpy.ndarray 形状为 (batch_size, input_ids_length)) — 词汇表中输入序列标记的索引。 如果你提供填充,默认情况下会忽略填充。

    可以使用 AutoTokenizer 获取索引。 有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • attention_mask (numpy.ndarray 形状为 (batch_size, sequence_length), 可选) — 掩码,用于避免对填充标记索引执行注意力。 掩码值选择在 [0, 1] 中:

    • 1 代表未被掩码的标记,
    • 0 代表被掩码的标记。

    什么是注意力掩码?

    可以使用 AutoTokenizer 获取索引。 有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    如果使用了 past_key_values,则可以选择仅输入最后一个 decoder_input_ids(请参阅 past_key_values)。

    如果要更改填充行为,则应阅读 modeling_opt._prepare_decoder_attention_mask 并根据您的需要修改。 有关默认策略的更多信息,请参阅 论文 中的图 1。

    • 1 表示头未被掩码
    • 0 表示头被掩码
  • position_ids (numpy.ndarray 形状为 (batch_size, sequence_length), 可选) — 位置嵌入中每个输入序列标记的位置索引。 在 [0, config.n_positions - 1] 范围内选择。

    什么是位置 ID?

  • past_key_values (Dict[str, np.ndarray], 可选, 由 init_cache 返回,或在传递之前的 past_key_values 时返回) — 预先计算的隐藏状态(注意力块中的键和值)的字典,可用于快速自动回归解码。 预先计算的键和值隐藏状态的形状为 [batch_size, max_length]
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。 有关详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。 详细内容请参阅返回张量中的 hidden_states
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。

返回

transformers.modeling_flax_outputs.FlaxMaskedLMOutputtuple(torch.FloatTensor)

一个 transformers.modeling_flax_outputs.FlaxMaskedLMOutputtorch.FloatTensor 的元组(如果传递了 return_dict=False 或者当 config.return_dict=False 时),包含取决于配置(LlamaConfig)和输入的各种元素。

  • logits (jnp.ndarray 形状为 (batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数(SoftMax 之前每个词汇表标记的分数)。

  • hidden_states (tuple(jnp.ndarray)可选,在传递 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — jnp.ndarray 的元组(一个用于嵌入的输出 + 一个用于每一层的输出),形状为 (batch_size, sequence_length, hidden_size)

    每一层的模型输出处的隐藏状态加上初始嵌入输出。

  • attentions (tuple(jnp.ndarray)可选,在传递 output_attentions=True 或当 config.output_attentions=True 时返回) — jnp.ndarray 的元组(每一层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。

FlaxLlamaPreTrainedModel 正向方法覆盖了 __call__ 特殊方法。

虽然前向传播的配方需要在此函数内定义,但应在之后调用Module实例,而不是此函数,因为前者负责运行前处理和后处理步骤,而后者则默默地忽略它们。

此示例使用随机模型,因为真实模型都非常大。要获得正确的结果,您应该使用 openlm-research/open_llama_3b_v2 而不是 afmck/testing-llama-tiny。如果您在加载该检查点时出现内存不足,您可以在 from_pretrained 调用中尝试添加 device_map="auto"

Example

>>> from transformers import AutoTokenizer, FlaxLlamaForCausalLM

>>> tokenizer = AutoTokenizer.from_pretrained("afmck/testing-llama-tiny")
>>> model = FlaxLlamaForCausalLM.from_pretrained("afmck/testing-llama-tiny")

>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="np")
>>> outputs = model(**inputs)

>>> # retrieve logts for next token
>>> next_token_logits = outputs.logits[:, -1]
< > 在 GitHub 上更新