Transformers 文件
Mllama
並獲得增強的文件體驗
開始使用
Mllama
概述
Llama 3.2-Vision 多模態大型語言模型 (LLM) 集合是預訓練和指令微調的影像推理生成模型集合,提供 11B 和 90B 兩種大小(文字 + 影像輸入 / 文字輸出)。Llama 3.2-Vision 指令微調模型針對視覺識別、影像推理、影像字幕和回答有關影像的通用問題進行了最佳化。
模型架構: Llama 3.2-Vision 建立在 Llama 3.1 純文字模型之上,後者是使用最佳化 Transformer 架構的自迴歸語言模型。調優版本使用監督微調 (SFT) 和人類反饋強化學習 (RLHF) 來與人類對有用性和安全性的偏好保持一致。為了支援影像識別任務,Llama 3.2-Vision 模型使用了一個單獨訓練的視覺介面卡,該介面卡與預訓練的 Llama 3.1 語言模型整合。該介面卡由一系列交叉注意力層組成,將影像編碼器表示饋送到核心 LLM 中。
使用技巧
- 對於影像+文字和文字輸入,請使用
MllamaForConditionalGeneration
。 - 對於純文字輸入,請使用
MllamaForCausalLM
進行生成,以避免載入視覺塔。 - 每個樣本可以包含多張影像,影像數量在不同樣本之間可以變化。處理器會將輸入填充到所有樣本中的最大影像數量,以及每張影像中的最大瓦片數量。
- 傳遞給處理器的文字應包含
"<|image|>"
標記,影像應插入到該位置。 - 處理器有自己的
apply_chat_template
方法,可以將聊天訊息轉換為文字,然後將其作為文字傳遞給處理器。如果您使用transformers>=4.49.0
,您還可以從apply_chat_template
獲取向量化輸出。有關如何使用的更多詳細資訊,請參閱下面的使用示例。
Mllama 有一個額外的標記用作文字中影像位置的佔位符。這意味著輸入 ID 和輸入嵌入層將有一個額外的標記。但是由於輸入和輸出嵌入的權重不繫結,lm_head
層少了一個標記,如果您想計算影像標記上的損失或應用一些 logits 處理器,它將失敗。如果您正在訓練,請確保在 labels
中遮蔽特殊 "<|image|>"
標記,因為模型不應訓練它們進行預測。
否則,如果您在生成時看到 CUDA 側的索引錯誤,請使用以下程式碼將 lm_head
擴充套件一個標記。
old_embeddings = model.get_output_embeddings()
num_tokens = model.vocab_size + 1
resized_embeddings = model._get_resized_lm_head(old_embeddings, new_num_tokens=num_tokens, mean_resizing=True)
resized_embeddings.requires_grad_(old_embeddings.weight.requires_grad)
model.set_output_embeddings(resized_embeddings)
使用示例
指令模型
import torch
from transformers import MllamaForConditionalGeneration, AutoProcessor
model_id = "meta-llama/Llama-3.2-11B-Vision-Instruct"
model = MllamaForConditionalGeneration.from_pretrained(model_id, device_map="auto", torch_dtype=torch.bfloat16)
processor = AutoProcessor.from_pretrained(model_id)
messages = [
[
{
"role": "user",
"content": [
{"type": "image", "url": "https://llava-vl.github.io/static/images/view.jpg"},
{"type": "text", "text": "What does the image show?"}
]
}
],
]
inputs = processor.apply_chat_template(messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt").to(model.device)
output = model.generate(**inputs, max_new_tokens=25)
print(processor.decode(output[0]))
基礎模型
import requests
import torch
from PIL import Image
from transformers import MllamaForConditionalGeneration, AutoProcessor
model_id = "meta-llama/Llama-3.2-11B-Vision"
model = MllamaForConditionalGeneration.from_pretrained(model_id, device_map="auto", torch_dtype=torch.bfloat16)
processor = AutoProcessor.from_pretrained(model_id)
prompt = "<|image|>If I had to write a haiku for this one"
url = "https://llava-vl.github.io/static/images/view.jpg"
raw_image = Image.open(requests.get(url, stream=True).raw)
inputs = processor(text=prompt, images=raw_image, return_tensors="pt").to(model.device)
output = model.generate(**inputs, do_sample=False, max_new_tokens=25)
print(processor.decode(output[0], skip_special_tokens=True))
MllamaConfig
class transformers.MllamaConfig
< 來源 >( vision_config = None text_config = None image_token_index = 128256 **kwargs )
這是用於儲存 MllamaForConditionalGeneration 配置的配置類。它用於根據指定的引數例項化 Mllama 模型,定義模型架構。例項化具有預設值的配置將生成與 Mllama-9B 類似的配置。
例如:meta-llama/Llama-3.2-11B-Vision
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請參閱 PretrainedConfig 的文件。
示例
>>> from transformers import MllamaForConditionalGeneration, MllamaConfig, MllamaVisionConfig, MllamaTextConfig
>>> # Initializing a CLIP-vision config
>>> vision_config = MllamaVisionConfig()
>>> # Initializing a Llama config
>>> text_config = MllamaTextConfig()
>>> # Initializing a mllama-11b style configuration
>>> configuration = MllamaConfig(vision_config, text_config)
>>> # Initializing a model from the mllama-11b style configuration
>>> model = MllamaForConditionalGeneration(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
MllamaProcessor
class transformers.MllamaProcessor
< 來源 >( image_processor tokenizer chat_template = None )
引數
- image_processor (MllamaImageProcessor) — 影像處理器是必需輸入。
- tokenizer ([
PreTrainedTokenizer
,PreTrainedTokenizerFast
]) — 標記器是必需輸入。 - chat_template (
str
, 可選) — Jinja 模板,用於將聊天訊息列表轉換為可標記化字串。
構建一個 Mllama 處理器,該處理器將 MllamaImageProcessor 和 PretrainedTokenizerFast
封裝到單個處理器中,該處理器繼承影像處理器和標記器功能。有關更多資訊,請參閱 __call__()
和 decode()
。傳遞 kwargs 的首選方式是按模態劃分的字典,請參見下面的使用示例。
from transformers import MllamaProcessor
from PIL import Image
processor = MllamaProcessor.from_pretrained("meta-llama/Llama-3.2-11B-Vision")
processor(
images=your_pil_image,
text=["<|image|>If I had to write a haiku for this one"],
images_kwargs = {"size": {"height": 448, "width": 448}},
text_kwargs = {"padding": "right"},
common_kwargs = {"return_tensors": "pt"},
)
此方法將其所有引數轉發給 PreTrainedTokenizerFast 的 batch_decode()。有關更多資訊,請參閱此方法的文件字串。
後處理影像文字到文字
< 來源 >( generated_outputs skip_special_tokens = True clean_up_tokenization_spaces = False **kwargs ) → list[str]
引數
- generated_outputs (
torch.Tensor
或np.ndarray
) — 模型generate
函式的輸出。輸出應為形狀為(batch_size, sequence_length)
或(sequence_length,)
的張量。 - skip_special_tokens (
bool
, 可選, 預設為True
) — 是否在輸出中刪除特殊標記。引數傳遞給標記器的batch_decode
方法。 - clean_up_tokenization_spaces (
bool
, 可選, 預設為False
) — 是否清除標記化空間。引數傳遞給標記器的batch_decode
方法。 - **kwargs — 要傳遞給標記器
batch_decode 方法
的附加引數。
返回
list[str]
解碼後的文字。
後處理模型輸出以解碼文字。
MllamaImageProcessor
class transformers.MllamaImageProcessor
< 來源 >( do_convert_rgb: bool = True do_resize: bool = True size: typing.Optional[dict[str, int]] = None resample: Resampling = <Resampling.BILINEAR: 2> do_rescale: bool = True rescale_factor: float = 0.00392156862745098 do_normalize: bool = True image_mean: typing.Union[float, list[float], NoneType] = None image_std: typing.Union[float, list[float], NoneType] = None do_pad: bool = True max_image_tiles: int = 4 **kwargs )
引數
- do_convert_rgb (
bool
, 可選, 預設為True
) — 是否將影像轉換為 RGB。如果輸入影像是其他格式(例如 RGBA),則此引數非常有用。僅當輸入影像為 PIL 格式時才有效。 - do_resize (
bool
, 可選, 預設為True
) — 是否調整影像大小。 - size (
dict[str, int]
, 可選, 預設為self.size
) — 影像瓦片的大小。應為一個字典,包含 'height' 和 'width' 鍵,兩者都為整數值。height 和 width 值應相等。 - resample (
int
, 可選, 預設為Resampling.BILINEAR
) — 如果調整影像大小,要使用的重取樣濾鏡。可以是PILImageResampling
列舉之一。僅當do_resize
設定為True
時才有效。 - do_rescale (
bool
, 可選, 預設為True
) — 是否重新縮放影像。 - rescale_factor (
float
, 可選, 預設為 0.0) — 如果do_rescale
設定為True
,則影像重新縮放因子。 - do_normalize (
bool
, 可選, 預設為True
) — 是否標準化影像。 - image_mean (
float
或list[float]
, 可選, 預設為self.image_mean
) — 用於標準化的影像均值。僅當do_normalize
設定為True
時才有效。 - image_std (
float
或list[float]
, 可選, 預設為self.image_std
) — 用於標準化的影像標準差。僅當do_normalize
設定為True
時才有效。 - do_pad (
bool
, 可選, 預設為True
) — 是否將影像填充到批次中的最大高度和寬度。 - max_image_tiles (
int
, 可選, 預設為 4) — 將影像分割成的最大圖塊數。
構建 Mllama 影像處理器。
pad
< 源 >( image: ndarray size: dict aspect_ratio: tuple data_format: typing.Union[str, transformers.image_utils.ChannelDimension, NoneType] = None input_data_format: typing.Union[str, transformers.image_utils.ChannelDimension, NoneType] = None ) → np.ndarray
將影像填充到 size
x aspect_ratio
。例如,如果 size 為 {height: 224, width: 224} 且縱橫比為 (1, 2),影像將被填充到 224x448。
preprocess
< 源 >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] do_convert_rgb: typing.Optional[bool] = None do_resize: typing.Optional[bool] = None size: typing.Optional[dict[str, int]] = None resample: typing.Optional[PIL.Image.Resampling] = None do_rescale: typing.Optional[bool] = None rescale_factor: typing.Optional[float] = None do_normalize: typing.Optional[bool] = None image_mean: typing.Union[float, list[float], NoneType] = None image_std: typing.Union[float, list[float], NoneType] = None do_pad: typing.Optional[bool] = None max_image_tiles: typing.Optional[int] = None input_data_format: typing.Union[str, transformers.image_utils.ChannelDimension, NoneType] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None ) → BatchFeature
的結構如下:
引數
- images (
ImageInput
) — 要預處理的影像列表。 - do_convert_rgb (
bool
, 可選, 預設為self.do_convert_rgb
) — 是否將影像轉換為 RGB。 - do_resize (
bool
, 可選, 預設為self.do_resize
) — 是否調整影像大小。 - size (
dict[str, int]
, 可選, 預設為self.size
) — 影像圖塊的大小。應為包含“height”和“width”鍵的字典,兩者均具有整數值。height 和 width 的值應相等。 - resample (
int
, 可選, 預設為self.resample
) — 如果調整影像大小,要使用的重取樣過濾器。這可以是列舉PILImageResampling
之一。僅當do_resize
設定為True
時才有效。 - do_rescale (
bool
, 可選, 預設為self.do_rescale
) — 是否重新縮放影像。 - rescale_factor (
float
, 可選, 預設為self.rescale_factor
) — 如果do_rescale
設定為True
,則用於重新縮放影像的縮放因子。 - do_normalize (
bool
, 可選, 預設為self.do_normalize
) — 是否標準化影像。 - image_mean (
float
或list[float]
, 可選, 預設為self.image_mean
) — 用於標準化的影像均值。僅當do_normalize
設定為True
時才有效。 - image_std (
float
或list[float]
, 可選, 預設為self.image_std
) — 用於標準化的影像標準差。僅當do_normalize
設定為True
時才有效。 - do_pad (
bool
, 可選, 預設為self.do_pad
) — 是否將影像填充到批次中最大的高度和寬度。 - max_image_tiles (
int
, 可選, 預設為self.max_image_tiles
) — 將影像分割成的最大圖塊數。 - input_data_format (
ChannelDimension
或str
, 可選) — 輸入影像的通道維度格式。如果未設定,將從輸入影像推斷通道維度格式。可以是以下之一:"channels_first"
或ChannelDimension.FIRST
: 影像格式為 (num_channels, height, width)。"channels_last"
或ChannelDimension.LAST
: 影像格式為 (height, width, num_channels)。"none"
或ChannelDimension.NONE
: 影像格式為 (height, width)。
- return_tensors (
str
或TensorType
, 可選) — 要返回的張量型別。可以是以下之一:- 未設定:返回
np.ndarray
列表。 TensorType.TENSORFLOW
或'tf'
: 返回型別為tf.Tensor
的批處理。TensorType.PYTORCH
或'pt'
: 返回型別為torch.Tensor
的批處理。TensorType.NUMPY
或'np'
: 返回型別為np.ndarray
的批處理。TensorType.JAX
或'jax'
: 返回型別為jax.numpy.ndarray
的批處理。
- 未設定:返回
返回
以下結構的 BatchFeature
- pixel_values (
TensorType
): 預處理後的畫素值。 - aspect_ratio_ids (
TensorType
): 影像的縱橫比 ID。 - num_tiles (
list[list[int]]
): 批次中每張影像的圖塊數。
預處理一批影像。
resize
< 源 >( image: ndarray size: dict max_image_tiles: int resample: Resampling = <Resampling.BILINEAR: 2> data_format: typing.Union[str, transformers.image_utils.ChannelDimension, NoneType] = None input_data_format: typing.Union[str, transformers.image_utils.ChannelDimension, NoneType] = None ) → Union[np.ndarray, tuple[int, int]]
引數
- image (
np.ndarray
) — 要調整大小的影像。 - size (
dict[str, int]
) — 輸出影像的大小。 - max_image_tiles (
int
) — 將影像分割成的最大圖塊數。 - resample (
PILImageResampling
, 可選, 預設為PILImageResampling.BICUBIC
) — 調整影像大小時使用的重取樣過濾器。 - data_format (
str
或ChannelDimension
, 可選) — 影像的通道維度格式。如果未提供,將與輸入影像的格式相同。 - input_data_format (
ChannelDimension
或str
, 可選) — 輸入影像的通道維度格式。如果未提供,將自動推斷。
返回
Union[np.ndarray, tuple[int, int]]
調整大小後的影像以及沿高度和寬度維度的圖塊數量元組。
調整影像大小以適應平鋪畫布,同時保持其縱橫比。最佳畫布大小根據最大圖塊數和圖塊大小計算得出。
該函式首先確定影像的最佳圖塊排列,然後調整影像大小以適應此畫布。返回調整大小後的影像以及沿高度和寬度維度的圖塊數量。
MllamaForConditionalGeneration
class transformers.MllamaForConditionalGeneration
< 源 >( config: MllamaConfig )
引數
- config (MllamaConfig) — 模型配置類,包含模型的所有引數。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請檢視 from_pretrained() 方法以載入模型權重。
Mllama 模型由一個視覺編碼器和一個語言模型組成。
此模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。
forward
< 源 >( input_ids: typing.Optional[torch.LongTensor] = None pixel_values: typing.Optional[torch.FloatTensor] = None aspect_ratio_mask: typing.Optional[torch.Tensor] = None aspect_ratio_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None cross_attention_mask: typing.Optional[torch.Tensor] = None cross_attention_states: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Union[transformers.cache_utils.Cache, list[torch.FloatTensor], NoneType] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[torch.LongTensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None cache_position: typing.Optional[torch.LongTensor] = None logits_to_keep: typing.Union[int, torch.Tensor] = 0 **kwargs: typing_extensions.Unpack[transformers.models.mllama.modeling_mllama.KwargsForCausalLM] ) → transformers.modeling_outputs.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
形狀為(batch_size, sequence_length)
, 可選) — 詞彙表中輸入序列 token 的索引。預設情況下會忽略填充。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參見 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- pixel_values (
torch.FloatTensor
形狀為(batch_size, num_channels, image_size, image_size)
, 可選) — 對應輸入影像的張量。畫素值可以使用{image_processor_class}
獲取。有關詳細資訊,請參見{image_processor_class}.__call__
({processor_class}
使用{image_processor_class}
處理影像)。 - aspect_ratio_mask (
torch.Tensor
形狀為(batch_size, max_num_images, max_num_tiles)
, 可選) — 用於避免對填充圖塊執行注意力操作的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示未被掩碼的圖塊,
- 0 表示被掩碼的圖塊。
- aspect_ratio_ids (
torch.Tensor
形狀為(batch_size, max_num_images)
, 可選) — 縱橫比 ID,用於根據每個輸入影像的縱橫比選擇適當的預計算圖塊嵌入。這些 ID 對應於模型支援的縱橫比列表中的索引,偏移量為 1。例如,如果模型支援縱橫比 [[1, 1], [1, 2], [2, 1]]:
- 縱橫比為 [1, 1] 的影像 ID 為 1
- 縱橫比為 [1, 2] 的影像 ID 為 2
- 縱橫比為 [2, 1] 的影像 ID 為 3
ID 0 保留用於填充(即,無影像)。
如果影像的縱橫比為 [1, 2],這意味著它被水平分割成 2 個圖塊,其
aspect_ratio_id
將為 2。 - attention_mask (
torch.Tensor
形狀為(batch_size, sequence_length)
, 可選) — 用於避免對填充 token 索引執行注意力操作的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示未被掩碼的 token,
- 0 表示被掩碼的 token。
- cross_attention_mask (
torch.Tensor
形狀為(batch_size, seq_length, max_num_images, max_num_tiles)
, 可選) — 交叉注意力掩碼,用於控制文字 token 和影像圖塊之間的互動。此 4D 張量定義了每個文字 token 應關注哪些影像圖塊。對於每個文字 token(在 seq_length 中):
- 1 表示 token 應關注相應的影像圖塊
- 0 表示 token 不應關注相應的影像圖塊
- cross_attention_states (
torch.FloatTensor
, 可選) — 視覺模型的輸出,用於交叉注意力。此張量包含語言模型將關注的已處理影像特徵。 - position_ids (
torch.LongTensor
形狀為(batch_size, sequence_length)
, 可選) — 每個輸入序列 token 在位置嵌入中的位置索引。選擇範圍為[0, config.n_positions - 1]
。 - past_key_values (
Union[~cache_utils.Cache, list[torch.FloatTensor], NoneType]
) — 預計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼上一階段返回的past_key_values
,當use_cache=True
或config.use_cache=True
時。允許兩種格式:
- Cache 例項,請參閱我們的 kv 快取指南;
- 長度為
config.n_layers
的tuple(torch.FloatTensor)
元組,每個元組包含 2 個形狀為(batch_size, num_heads, sequence_length, embed_size_per_head)
的張量)。這也被稱為舊版快取格式。
模型將輸出與輸入相同的快取格式。如果沒有傳入
past_key_values
,將返回舊版快取格式。如果使用
past_key_values
,使用者可以選擇僅輸入形狀為(batch_size, 1)
的最後一個input_ids
(那些沒有將其過去的鍵值狀態提供給此模型的 token),而不是形狀為(batch_size, sequence_length)
的所有input_ids
。 - inputs_embeds (
torch.FloatTensor
形狀為(batch_size, sequence_length, hidden_size)
, 可選) — 可選地,您可以直接傳入嵌入表示,而不是傳入input_ids
。如果您希望對input_ids
索引如何轉換為相關向量有比模型內部嵌入查詢矩陣更強的控制,這會很有用。 - labels (
torch.LongTensor
形狀為(batch_size, sequence_length)
, 可選) — 用於計算 masked language modeling 損失的標籤。索引應在[0, ..., config.vocab_size]
或 -100 之間(參見input_ids
文件字串)。索引設定為-100
的 token 將被忽略(被掩碼),損失僅針對標籤在[0, ..., config.vocab_size]
中的 token 計算。 - 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
不同,此張量不受填充影響。它用於在正確位置更新快取並推斷完整的序列長度。 - logits_to_keep (
Union[int, torch.Tensor]
, 預設為0
) — 如果是int
,則計算最後logits_to_keep
個 token 的 logits。如果是0
,則計算所有input_ids
的 logits(特殊情況)。生成時只需要最後一個 token 的 logits,只計算該 token 可以節省記憶體,這對於長序列或大詞彙量來說非常重要。如果是torch.Tensor
,則必須是與序列長度維度中要保留的索引相對應的 1D 張量。當使用打包張量格式(批次和序列長度的單個維度)時,這很有用。
返回
transformers.modeling_outputs.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.CausalLMOutputWithPast 或 torch.FloatTensor
元組(如果傳入 return_dict=False
或 config.return_dict=False
),包含根據配置 (MllamaConfig) 和輸入的不同元素。
-
loss (
torch.FloatTensor
形狀為(1,)
,可選,當提供labels
時返回) — 語言建模損失(用於下一個 token 預測)。 -
logits (形狀為
(batch_size, sequence_length, config.vocab_size)
的torch.FloatTensor
) — 語言建模頭部的預測分數(SoftMax 之前的每個詞彙標記的分數)。 -
past_key_values (
Cache
, 可選, 當傳入use_cache=True
或config.use_cache=True
時返回) — 這是一個 Cache 例項。有關詳細資訊,請參閱我們的 kv 快取指南。包含預計算的隱藏狀態(自注意力塊中的鍵和值),可用於(參見
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
MllamaForConditionalGeneration forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現必須在此函式中定義,但在此之後應該呼叫 Module
例項,而不是直接呼叫此函式,因為前者負責執行預處理和後處理步驟,而後者會默默地忽略它們。
示例
>>> from PIL import Image
>>> import requests
>>> from transformers import AutoProcessor, MllamaForConditionalGeneration
>>> checkpoint = "meta-llama/Llama-3.2-11B-Vision"
>>> model = MllamaForConditionalGeneration.from_pretrained(checkpoint)
>>> processor = AutoProcessor.from_pretrained(checkpoint)
>>> prompt = "<|image|>If I had to write a haiku for this one"
>>> url = "https://www.ilankelman.org/stopsigns/australia.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = processor(text=prompt, images=image, return_tensors="pt")
>>> # Generate
>>> output = model.generate(**inputs, max_new_tokens=15)
>>> prompt_len = inputs.input_ids.shape[-1]
>>> generated_ids = output[:, prompt_len:]
>>> generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)
>>> print(generated_text)
[', it would be:.\\nA stop sign in Chinatown.\\n']
MllamaForCausalLM
class transformers.MllamaForCausalLM
< source >( config )
引數
- config (MllamaForCausalLM) — 模型的配置類,包含模型的所有引數。使用配置檔案初始化不會載入與模型相關的權重,只會載入配置。要載入模型權重,請檢視from_pretrained()方法。
帶有語言建模頭的Mllama文字模型。
此模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None cross_attention_states: typing.Optional[torch.LongTensor] = None cross_attention_mask: typing.Optional[torch.LongTensor] = None full_text_row_masked_out_mask: typing.Optional[tuple[torch.Tensor, torch.Tensor]] = None past_key_values: typing.Union[transformers.cache_utils.Cache, list[torch.FloatTensor], NoneType] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[torch.LongTensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None cache_position: typing.Optional[torch.LongTensor] = None logits_to_keep: typing.Union[int, torch.Tensor] = 0 **kwargs: typing_extensions.Unpack[transformers.models.mllama.modeling_mllama.KwargsForCausalLM] ) → transformers.modeling_outputs.CausalLMOutputWithPast or tuple(torch.FloatTensor)
引數
- input_ids (形狀為
(batch_size, sequence_length)
的torch.LongTensor
,可選) — 詞彙表中輸入序列標記的索引。預設情況下會忽略填充。可以使用AutoTokenizer獲取索引。有關詳細資訊,請參閱PreTrainedTokenizer.encode()和PreTrainedTokenizer.call()。
- attention_mask (形狀為
(batch_size, sequence_length)
的torch.Tensor
,可選) — 用於避免對填充標記索引執行注意力的掩碼。掩碼值在[0, 1]
中選擇:- 1表示未被掩碼的標記,
- 0表示被掩碼的標記。
- position_ids (形狀為
(batch_size, sequence_length)
的torch.LongTensor
,可選) — 每個輸入序列標記在位置嵌入中的位置索引。選擇範圍為[0, config.n_positions - 1]
。 - cross_attention_states (
torch.FloatTensor
, 可選) — 視覺模型的輸出,用於交叉注意力。此張量包含語言模型將關注的已處理影像特徵。 - cross_attention_mask (形狀為
(batch_size, seq_length, max_num_images, max_num_tiles)
的torch.Tensor
,可選) — 交叉注意力掩碼,用於控制文字標記和影像塊之間的互動。此4D張量定義了每個文字標記應關注哪些影像塊。對於每個文字標記(在seq_length中):
- 1表示標記應關注對應的影像塊
- 0表示標記不應關注對應的影像塊
- full_text_row_masked_out_mask (
tuple[torch.Tensor, torch.Tensor]
,可選) — 包含兩個張量的元組,用於掩蓋交叉注意力機制中的行:- 第一個張量的形狀為
(batch_size, 1, seq_length, 1)
,包含0或1的值。值為0表示對應的文字標記在交叉注意力矩陣中的整行應被掩蓋(所有影像標記被忽略)。 - 第二個張量具有相同的形狀,並在交叉注意力層的正向傳播期間內部用於應用掩碼。此掩碼派生自cross_attention_mask,用於處理文字標記不應關注任何影像標記的情況。
- 第一個張量的形狀為
- past_key_values (
Union[~cache_utils.Cache, list[torch.FloatTensor], NoneType]
) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼前期返回的past_key_values
,當use_cache=True
或config.use_cache=True
時。允許兩種格式:
- 一個Cache例項,請參閱我們的kv快取指南;
- 長度為
config.n_layers
的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 (形狀為
(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
,可選) — 可選地,您可以選擇直接傳入嵌入表示而不是傳入input_ids
。如果您希望對如何將input_ids
索引轉換為關聯向量有比模型內部嵌入查詢矩陣更多的控制,這將非常有用。 - labels (形狀為
(batch_size, sequence_length)
的torch.LongTensor
,可選) — 用於計算掩碼語言建模損失的標籤。索引應在[0, ..., config.vocab_size]
或-100(請參閱input_ids
文件字串)中。索引設定為-100
的標記將被忽略(掩碼),損失僅針對標籤在[0, ..., config.vocab_size]
中的標記計算。 - 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
不同,此張量不受填充影響。它用於在正確位置更新快取並推斷完整的序列長度。 - logits_to_keep (
Union[int, torch.Tensor]
,預設為0
) — 如果是int
,則計算最後logits_to_keep
個標記的logits。如果是0
,則計算所有input_ids
的logits(特殊情況)。生成時只需要最後一個標記的logits,僅為該標記計算可以節省記憶體,這對於長序列或大詞彙量來說非常顯著。如果是torch.Tensor
,必須是與序列長度維度中要保留的索引相對應的1D張量。這在使用打包張量格式(批處理和序列長度的單一維度)時非常有用。
返回
transformers.modeling_outputs.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.CausalLMOutputWithPast 或 torch.FloatTensor
元組(如果傳入 return_dict=False
或 config.return_dict=False
),包含根據配置 (MllamaConfig) 和輸入的不同元素。
-
loss (
torch.FloatTensor
形狀為(1,)
,可選,當提供labels
時返回) — 語言建模損失(用於下一個 token 預測)。 -
logits (形狀為
(batch_size, sequence_length, config.vocab_size)
的torch.FloatTensor
) — 語言建模頭部的預測分數(SoftMax 之前的每個詞彙標記的分數)。 -
past_key_values (
Cache
, 可選, 當傳入use_cache=True
或config.use_cache=True
時返回) — 這是一個 Cache 例項。有關詳細資訊,請參閱我們的 kv 快取指南。包含預計算的隱藏狀態(自注意力塊中的鍵和值),可用於(參見
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
Mllama Text Model 的正向傳播方法,覆蓋了__call__
特殊方法。
儘管前向傳播的實現必須在此函式中定義,但在此之後應該呼叫 Module
例項,而不是直接呼叫此函式,因為前者負責執行預處理和後處理步驟,而後者會默默地忽略它們。
示例
>>> from transformers import AutoTokenizer, MllamaForCausalLM
>>> model = MllamaForCausalLM.from_pretrained("Llama-3.2-11B-Vision")
>>> tokenizer = AutoTokenizer.from_pretrained("Llama-3.2-11B-Vision")
>>> prompt = "If I had to write a haiku, it would be:"
>>> inputs = tokenizer(prompt, return_tensors="pt")
>>> # Generate
>>> generate_ids = model.generate(inputs.input_ids, max_length=40, do_sample=True, temperature=0.6)
>>> result = tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
>>> print(result)
If I had to write a haiku, it would be: "Snowflakes gently fall" - simple, yet peaceful.
I love the idea of snowflakes gently falling, each one
MllamaTextModel
class transformers.MllamaTextModel
< source >( config: MllamaTextConfig )
引數
- config (
MllamaTextConfig
) — 模型的配置類,包含模型的所有引數。使用配置檔案初始化不會載入與模型相關的權重,只會載入配置。要載入模型權重,請檢視from_pretrained()方法。
Mllama文字模型,由帶自注意力和交叉注意力層的Transformer組成。
此模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None cross_attention_states: typing.Optional[torch.FloatTensor] = None cross_attention_mask: typing.Optional[torch.Tensor] = None full_text_row_masked_out_mask: typing.Optional[tuple[torch.Tensor, torch.Tensor]] = None past_key_values: typing.Union[transformers.cache_utils.Cache, list[torch.FloatTensor], NoneType] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None cache_position: typing.Optional[torch.LongTensor] = None **kwargs: typing_extensions.Unpack[transformers.modeling_flash_attention_utils.FlashAttentionKwargs] ) → transformers.modeling_outputs.BaseModelOutputWithPast or tuple(torch.FloatTensor)
引數
- input_ids (形狀為
(batch_size, sequence_length)
的torch.LongTensor
,可選) — 詞彙表中輸入序列標記的索引。預設情況下會忽略填充。可以使用AutoTokenizer獲取索引。有關詳細資訊,請參閱PreTrainedTokenizer.encode()和PreTrainedTokenizer.call()。
- attention_mask (形狀為
(batch_size, sequence_length)
的torch.Tensor
,可選) — 用於避免對填充標記索引執行注意力的掩碼。掩碼值在[0, 1]
中選擇:- 1表示未被掩碼的標記,
- 0表示被掩碼的標記。
- position_ids (形狀為
(batch_size, sequence_length)
的torch.LongTensor
,可選) — 每個輸入序列標記在位置嵌入中的位置索引。選擇範圍為[0, config.n_positions - 1]
。 - cross_attention_states (
torch.FloatTensor
,可選) — 視覺模型的輸出,用於交叉注意力。此張量包含語言模型將關注的已處理影像特徵。 - cross_attention_mask (形狀為
(batch_size, seq_length, max_num_images, max_num_tiles)
的torch.Tensor
,可選) — 交叉注意力掩碼,用於控制文字標記和影像塊之間的互動。此4D張量定義了每個文字標記應關注哪些影像塊。對於每個文字標記(在seq_length中):
- 1表示標記應關注對應的影像塊
- 0表示標記不應關注對應的影像塊
- full_text_row_masked_out_mask (
tuple[torch.Tensor, torch.Tensor]
,可選) — 包含兩個張量的元組,用於掩蓋交叉注意力機制中的行:- 第一個張量的形狀為
(batch_size, 1, seq_length, 1)
,包含0或1的值。值為0表示對應的文字標記在交叉注意力矩陣中的整行應被掩蓋(所有影像標記被忽略)。 - 第二個張量具有相同的形狀,並在交叉注意力層的正向傳播期間內部用於應用掩碼。此掩碼派生自cross_attention_mask,用於處理文字標記不應關注任何影像標記的情況。
- 第一個張量的形狀為
- past_key_values (
Union[~cache_utils.Cache, list[torch.FloatTensor], NoneType]
) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼前期返回的past_key_values
,當use_cache=True
或config.use_cache=True
時。允許兩種格式:
- 一個Cache例項,請參閱我們的kv快取指南;
- 長度為
config.n_layers
的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 (形狀為
(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
不同,此張量不受填充影響。它用於在正確位置更新快取並推斷完整的序列長度。
返回
transformers.modeling_outputs.BaseModelOutputWithPast 或 tuple(torch.FloatTensor)
一個transformers.modeling_outputs.BaseModelOutputWithPast或一個torch.FloatTensor
元組(如果傳入return_dict=False
或config.return_dict=False
),包含根據配置(MllamaConfig)和輸入的不同元素。
-
last_hidden_state (
torch.FloatTensor
, 形狀為(batch_size, sequence_length, hidden_size)
) — 模型最後一層輸出的隱藏狀態序列。如果使用了
past_key_values
,則只輸出形狀為(batch_size, 1, hidden_size)
的序列的最後一個隱藏狀態。 -
past_key_values (
Cache
, 可選, 當傳入use_cache=True
或config.use_cache=True
時返回) — 這是一個 Cache 例項。有關詳細資訊,請參閱我們的 kv 快取指南。包含預先計算的隱藏狀態(自注意力塊中的鍵和值,如果
config.is_encoder_decoder=True
則可選地包含交叉注意力塊中的鍵和值),可用於(請參閱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 後的注意力權重,用於計算自注意力頭中的加權平均值。
MllamaTextModel 的正向傳播方法,覆蓋了__call__
特殊方法。
儘管前向傳播的實現必須在此函式中定義,但在此之後應該呼叫 Module
例項,而不是直接呼叫此函式,因為前者負責執行預處理和後處理步驟,而後者會默默地忽略它們。
示例
>>> from transformers import AutoProcessor, MllamaTextModel
>>> checkpoint = "meta-llama/Llama-3.2-11B-Vision"
>>> model = MllamaTextModel.from_pretrained(checkpoint)
>>> processor = AutoProcessor.from_pretrained(checkpoint)
>>> text = "<|image|>If I had to write a haiku for this one"
>>> inputs = processor(text=text, return_tensors="pt")
>>> output = model(**inputs)
>>> print(output.last_hidden_state.shape)
torch.Size([1, 13, 4096])
MllamaModel
class transformers.MllamaModel
< source >( config: MllamaConfig )
引數
- config (MllamaConfig) — 模型的配置類,包含模型的所有引數。使用配置檔案初始化不會載入與模型相關的權重,只會載入配置。要載入模型權重,請檢視from_pretrained()方法。
Mllama模型,由一個視覺編碼器和一個不帶語言建模頭的語言模型組成。
此模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = None pixel_values: typing.Optional[torch.FloatTensor] = None aspect_ratio_mask: typing.Optional[torch.Tensor] = None aspect_ratio_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None cross_attention_mask: typing.Optional[torch.Tensor] = None cross_attention_states: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[list[torch.FloatTensor]] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None cache_position: typing.Optional[torch.LongTensor] = None **kwargs: typing_extensions.Unpack[transformers.modeling_flash_attention_utils.FlashAttentionKwargs] ) → transformers.modeling_outputs.CausalLMOutputWithPast or tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 詞彙表中輸入序列標記的索引。預設情況下會忽略填充。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- pixel_values (
torch.FloatTensor
,形狀為(batch_size, num_channels, image_size, image_size)
,可選) — 與輸入影像對應的張量。可以使用{image_processor_class}
獲取畫素值。有關詳細資訊,請參閱{image_processor_class}.__call__
({processor_class}
使用{image_processor_class}
處理影像)。 - aspect_ratio_mask (
torch.Tensor
,形狀為(batch_size, max_num_images, max_num_tiles)
,可選) — 用於避免對填充瓦片執行注意力操作的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示**未被掩碼**的瓦片,
- 0 表示**被掩碼**的瓦片。
- aspect_ratio_ids (
torch.Tensor
,形狀為(batch_size, max_num_images)
,可選) — 寬高比 ID,用於根據每個輸入影像的寬高比選擇適當的預計算瓦片嵌入。這些 ID 對應於模型支援的寬高比列表中的索引,偏移量為 1。例如,如果模型支援的寬高比為 [[1, 1], [1, 2], [2, 1]]:
- 寬高比為 [1, 1] 的影像 ID 為 1
- 寬高比為 [1, 2] 的影像 ID 為 2
- 寬高比為 [2, 1] 的影像 ID 為 3
ID 0 保留用於填充(即無影像)。
如果影像的寬高比為 [1, 2],則表示它被水平分割成 2 個瓦片,其
aspect_ratio_id
為 2。 - attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免對填充標記索引執行注意力操作的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示**未被掩碼**的標記,
- 0 表示**被掩碼**的標記。
- cross_attention_mask (
torch.Tensor
,形狀為(batch_size, seq_length, max_num_images, max_num_tiles)
,可選) — 交叉注意力掩碼,用於控制文字標記和影像瓦片之間的互動。這個 4D 張量定義了每個文字標記應該關注哪些影像瓦片。對於每個文字標記(在 seq_length 中):
- 1 表示標記**應該關注**相應的影像瓦片
- 0 表示標記**不應該關注**相應的影像瓦片
- cross_attention_states (
torch.FloatTensor
,可選) — 視覺模型的輸出,用於交叉注意力。此張量包含語言模型將關注的處理後的影像特徵。 - position_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 每個輸入序列標記在位置嵌入中的位置索引。選擇範圍為[0, config.n_positions - 1]
。 - past_key_values (
list[torch.FloatTensor]
,可選) — 預計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼前一階段返回的past_key_values
,當use_cache=True
或config.use_cache=True
時。允許兩種格式:
- 一個 Cache 例項,請參閱我們的 kv 快取指南;
- 長度為
config.n_layers
的tuple(torch.FloatTensor)
元組,每個元組包含 2 個形狀為(batch_size, num_heads, sequence_length, embed_size_per_head)
的張量)。這也被稱為傳統快取格式。
模型將輸出與輸入相同的快取格式。如果沒有傳入
past_key_values
,將返回傳統快取格式。如果使用
past_key_values
,使用者可以選擇僅輸入形狀為(batch_size, 1)
的最後一個input_ids
(那些沒有將其過去的鍵值狀態提供給此模型的),而不是形狀為(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
不同,此張量不受填充影響。它用於在正確位置更新快取並推斷完整的序列長度。
返回
transformers.modeling_outputs.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.CausalLMOutputWithPast 或 torch.FloatTensor
元組(如果傳入 return_dict=False
或 config.return_dict=False
),包含根據配置 (MllamaConfig) 和輸入的不同元素。
-
loss (
torch.FloatTensor
形狀為(1,)
,可選,當提供labels
時返回) — 語言建模損失(用於下一個 token 預測)。 -
logits (形狀為
(batch_size, sequence_length, config.vocab_size)
的torch.FloatTensor
) — 語言建模頭部的預測分數(SoftMax 之前的每個詞彙標記的分數)。 -
past_key_values (
Cache
, 可選, 當傳入use_cache=True
或config.use_cache=True
時返回) — 這是一個 Cache 例項。有關詳細資訊,請參閱我們的 kv 快取指南。包含預計算的隱藏狀態(自注意力塊中的鍵和值),可用於(參見
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
MllamaModel 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現必須在此函式中定義,但在此之後應該呼叫 Module
例項,而不是直接呼叫此函式,因為前者負責執行預處理和後處理步驟,而後者會默默地忽略它們。
MllamaForCausalLM
class transformers.MllamaForCausalLM
< source >( config )
引數
- config (MllamaForCausalLM) — 模型的配置類,包含模型的所有引數。使用配置檔案初始化不會載入與模型相關的權重,只會載入配置。要載入模型權重,請檢視from_pretrained()方法。
帶有語言建模頭的Mllama文字模型。
此模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None cross_attention_states: typing.Optional[torch.LongTensor] = None cross_attention_mask: typing.Optional[torch.LongTensor] = None full_text_row_masked_out_mask: typing.Optional[tuple[torch.Tensor, torch.Tensor]] = None past_key_values: typing.Union[transformers.cache_utils.Cache, list[torch.FloatTensor], NoneType] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[torch.LongTensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None cache_position: typing.Optional[torch.LongTensor] = None logits_to_keep: typing.Union[int, torch.Tensor] = 0 **kwargs: typing_extensions.Unpack[transformers.models.mllama.modeling_mllama.KwargsForCausalLM] ) → transformers.modeling_outputs.CausalLMOutputWithPast or tuple(torch.FloatTensor)
引數
- input_ids (形狀為
(batch_size, sequence_length)
的torch.LongTensor
,可選) — 詞彙表中輸入序列標記的索引。預設情況下會忽略填充。可以使用AutoTokenizer獲取索引。有關詳細資訊,請參閱PreTrainedTokenizer.encode()和PreTrainedTokenizer.call()。
- attention_mask (形狀為
(batch_size, sequence_length)
的torch.Tensor
,可選) — 用於避免對填充標記索引執行注意力的掩碼。掩碼值在[0, 1]
中選擇:- 1表示未被掩碼的標記,
- 0表示被掩碼的標記。
- position_ids (形狀為
(batch_size, sequence_length)
的torch.LongTensor
,可選) — 每個輸入序列標記在位置嵌入中的位置索引。選擇範圍為[0, config.n_positions - 1]
。 - cross_attention_states (
torch.FloatTensor
, 可選) — 視覺模型的輸出,用於交叉注意力。此張量包含語言模型將關注的已處理影像特徵。 - cross_attention_mask (形狀為
(batch_size, seq_length, max_num_images, max_num_tiles)
的torch.Tensor
,可選) — 交叉注意力掩碼,用於控制文字標記和影像塊之間的互動。此4D張量定義了每個文字標記應關注哪些影像塊。對於每個文字標記(在seq_length中):
- 1表示標記應關注對應的影像塊
- 0表示標記不應關注對應的影像塊
- full_text_row_masked_out_mask (
tuple[torch.Tensor, torch.Tensor]
,可選) — 包含兩個張量的元組,用於掩蓋交叉注意力機制中的行:- 第一個張量的形狀為
(batch_size, 1, seq_length, 1)
,包含0或1的值。值為0表示對應的文字標記在交叉注意力矩陣中的整行應被掩蓋(所有影像標記被忽略)。 - 第二個張量具有相同的形狀,並在交叉注意力層的正向傳播期間內部用於應用掩碼。此掩碼派生自cross_attention_mask,用於處理文字標記不應關注任何影像標記的情況。
- 第一個張量的形狀為
- past_key_values (
Union[~cache_utils.Cache, list[torch.FloatTensor], NoneType]
) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼前期返回的past_key_values
,當use_cache=True
或config.use_cache=True
時。允許兩種格式:
- 一個Cache例項,請參閱我們的kv快取指南;
- 長度為
config.n_layers
的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 (形狀為
(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
,可選) — 可選地,您可以選擇直接傳入嵌入表示而不是傳入input_ids
。如果您希望對如何將input_ids
索引轉換為關聯向量有比模型內部嵌入查詢矩陣更多的控制,這將非常有用。 - labels (形狀為
(batch_size, sequence_length)
的torch.LongTensor
,可選) — 用於計算掩碼語言建模損失的標籤。索引應在[0, ..., config.vocab_size]
或-100(請參閱input_ids
文件字串)中。索引設定為-100
的標記將被忽略(掩碼),損失僅針對標籤在[0, ..., config.vocab_size]
中的標記計算。 - 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
不同,此張量不受填充影響。它用於在正確位置更新快取並推斷完整的序列長度。 - logits_to_keep (
Union[int, torch.Tensor]
,預設為0
) — 如果是int
,則計算最後logits_to_keep
個標記的logits。如果是0
,則計算所有input_ids
的logits(特殊情況)。生成時只需要最後一個標記的logits,僅為該標記計算可以節省記憶體,這對於長序列或大詞彙量來說非常顯著。如果是torch.Tensor
,必須是與序列長度維度中要保留的索引相對應的1D張量。這在使用打包張量格式(批處理和序列長度的單一維度)時非常有用。
返回
transformers.modeling_outputs.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.CausalLMOutputWithPast 或 torch.FloatTensor
元組(如果傳入 return_dict=False
或 config.return_dict=False
),包含根據配置 (MllamaConfig) 和輸入的不同元素。
-
loss (
torch.FloatTensor
形狀為(1,)
,可選,當提供labels
時返回) — 語言建模損失(用於下一個 token 預測)。 -
logits (形狀為
(batch_size, sequence_length, config.vocab_size)
的torch.FloatTensor
) — 語言建模頭部的預測分數(SoftMax 之前的每個詞彙標記的分數)。 -
past_key_values (
Cache
, 可選, 當傳入use_cache=True
或config.use_cache=True
時返回) — 這是一個 Cache 例項。有關詳細資訊,請參閱我們的 kv 快取指南。包含預計算的隱藏狀態(自注意力塊中的鍵和值),可用於(參見
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
Mllama Text Model 的正向傳播方法,覆蓋了__call__
特殊方法。
儘管前向傳播的實現必須在此函式中定義,但在此之後應該呼叫 Module
例項,而不是直接呼叫此函式,因為前者負責執行預處理和後處理步驟,而後者會默默地忽略它們。
示例
>>> from transformers import AutoTokenizer, MllamaForCausalLM
>>> model = MllamaForCausalLM.from_pretrained("Llama-3.2-11B-Vision")
>>> tokenizer = AutoTokenizer.from_pretrained("Llama-3.2-11B-Vision")
>>> prompt = "If I had to write a haiku, it would be:"
>>> inputs = tokenizer(prompt, return_tensors="pt")
>>> # Generate
>>> generate_ids = model.generate(inputs.input_ids, max_length=40, do_sample=True, temperature=0.6)
>>> result = tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
>>> print(result)
If I had to write a haiku, it would be: "Snowflakes gently fall" - simple, yet peaceful.
I love the idea of snowflakes gently falling, each one
MllamaVisionModel
類 transformers.MllamaVisionModel
< 源 >( config: MllamaVisionConfig )
引數
- config (
MllamaVisionConfig
) — 包含模型所有引數的模型配置類。使用配置檔案初始化不載入與模型關聯的權重,僅載入配置。請檢視 from_pretrained() 方法以載入模型權重。
Mllama 視覺模型由兩個視覺編碼器組成。
此模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。
forward
< 源 >( pixel_values: Tensor aspect_ratio_ids: Tensor aspect_ratio_mask: Tensor output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.BaseModelOutput 或 tuple(torch.FloatTensor)
引數
- pixel_values (
torch.Tensor
,形狀為(batch_size, num_channels, image_size, image_size)
) — 與輸入影像對應的張量。可以使用{image_processor_class}
獲取畫素值。有關詳細資訊,請參閱{image_processor_class}.__call__
({processor_class}
使用{image_processor_class}
處理影像)。 - aspect_ratio_ids (
torch.Tensor
,形狀為(batch_size, max_num_images)
,可選) — 寬高比 ID,用於根據每個輸入影像的寬高比選擇適當的預計算瓦片嵌入。這些 ID 對應於模型支援的寬高比列表中的索引,偏移量為 1。例如,如果模型支援的寬高比為 [[1, 1], [1, 2], [2, 1]]:
- 寬高比為 [1, 1] 的影像 ID 為 1
- 寬高比為 [1, 2] 的影像 ID 為 2
- 寬高比為 [2, 1] 的影像 ID 為 3
ID 0 保留用於填充(即無影像)。
如果影像的寬高比為 [1, 2],則表示它被水平分割成 2 個瓦片,其
aspect_ratio_id
為 2。 - aspect_ratio_mask (
torch.Tensor
,形狀為(batch_size, max_num_images, max_num_tiles)
,可選) — 用於避免對填充瓦片執行注意力操作的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示**未被掩碼**的瓦片,
- 0 表示**被掩碼**的瓦片。
- output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 而不是純元組。
返回
transformers.modeling_outputs.BaseModelOutput 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.BaseModelOutput 或一個 torch.FloatTensor
元組(如果傳遞了 return_dict=False
或 config.return_dict=False
),包含根據配置 (MllamaConfig) 和輸入而變化的各種元素。
-
last_hidden_state (
torch.FloatTensor
, 形狀為(batch_size, sequence_length, hidden_size)
) — 模型最後一層輸出的隱藏狀態序列。 -
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
MllamaVisionModel 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現必須在此函式中定義,但在此之後應該呼叫 Module
例項,而不是直接呼叫此函式,因為前者負責執行預處理和後處理步驟,而後者會默默地忽略它們。
示例
>>> from PIL import Image
>>> import requests
>>> from transformers import AutoProcessor, MllamaVisionModel
>>> checkpoint = "meta-llama/Llama-3.2-11B-Vision"
>>> model = MllamaVisionModel.from_pretrained(checkpoint)
>>> processor = AutoProcessor.from_pretrained(checkpoint)
>>> url = "https://www.ilankelman.org/stopsigns/australia.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = processor(images=image, return_tensors="pt")
>>> output = model(**inputs)
>>> print(output.last_hidden_state.shape)
torch.Size([1, 1, 4, 1025, 7680])