Transformers 文件
Emu3
並獲得增強的文件體驗
開始使用
Emu3
概述
Emu3 模型由 Xinlong Wang、Xiaosong Zhang、Zhengxiong Luo、Quan Sun、Yufeng Cui、Jinsheng Wang、Fan Zhang、Yueze Wang、Zhen Li、Qiying Yu、Yingli Zhao、Yulong Ao、Xuebin Min、Tao Li、Boya Wu、Bo Zhao、Bowen Zhang、Liangdong Wang、Guang Liu、Zheqi He、Xi Yang、Jingjing Liu、Yonghua Lin、Tiejun Huang、Zhongyuan Wang 在 Emu3: Next-Token Prediction is All You Need 中提出。
Emu3 是一種多模態大型語言模型(LLM),它使用向量量化將影像標記化為離散的 token。離散化的影像 token 隨後與文字 token ID 融合,用於影像和文字生成。該模型還可以透過預測影像 token ID 來生成影像。
論文摘要如下:
雖然下一 token 預測被認為是實現通用人工智慧的有前途的途徑,但它在多模態任務中一直難以表現出色,這些任務仍然由擴散模型(如 Stable Diffusion)和組合方法(如 CLIP 與 LLM 結合)主導。在本文中,我們介紹了 Emu3,一套僅透過下一 token 預測訓練的最新多模態模型。透過將影像、文字和影片標記化為離散空間,我們從頭開始訓練一個 Transformer,並將其應用於多模態序列的混合。Emu3 在生成和感知任務中均優於多個成熟的特定任務模型,超越了 SDXL 和 LLaVA-1.6 等旗艦模型,同時消除了對擴散或組合架構的需求。Emu3 還能夠透過預測影片序列中的下一 token 來生成高保真影片。我們透過專注於一個核心點——token,簡化了複雜的多模態模型設計,為訓練和推理階段的擴充套件釋放了巨大潛力。我們的結果表明,下一 token 預測是構建超越語言的通用多模態智慧的有前途的途徑。我們開源了關鍵技術和模型,以支援這一方向的進一步研究。
技巧
我們建議使用者在進行批處理生成之前設定
processor.tokenizer.padding_side = "left"
,因為這會帶來更準確的結果。請注意,該模型已使用特定的提示格式進行聊天訓練。使用
processor.apply_chat_template(my_conversation_dict)
來正確格式化您的提示。Emu3 針對影像生成和文字生成有兩個不同的檢查點,請確保在載入模型時使用正確的檢查點。為了生成影像,建議使用
prefix_constraints
,以便生成的 token 只從可能的影像 token 中取樣。更多使用示例請參見下文。
Transformers 中的 Emu3 實現使用一個特殊的影像 token 來指示在哪裡合併影像嵌入。這個特殊的影像 token 並不是新的,它使用了一個保留 token:<|extra_0|>
。您必須在提示中影像應該嵌入的位置新增 <image>
才能正確生成。
此模型由 RaushanTurganbay 貢獻。原始程式碼可在 此處 找到。
使用示例
文字生成推理
以下是載入模型並以半精度 (torch.bfloat16
) 執行推理,從文字或文字和影像輸入生成文字輸出的方法
from transformers import Emu3Processor, Emu3ForConditionalGeneration
import torch
from PIL import Image
import requests
processor = Emu3Processor.from_pretrained("BAAI/Emu3-Chat-hf")
model = Emu3ForConditionalGeneration.from_pretrained("BAAI/Emu3-Chat-hf", torch_dtype=torch.bfloat16, device_map="cuda")
# prepare image and text prompt
url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
image = Image.open(requests.get(url, stream=True).raw)
prompt = "What do you see in this image?<image>"
inputs = processor(images=image, text=prompt, return_tensors="pt").to(model.device, dtype=torch.bfloat16)
# autoregressively complete prompt
output = model.generate(**inputs, max_new_tokens=50)
print(processor.decode(output[0], skip_special_tokens=True))
影像生成推理
Emu3 還可以根據文字輸入生成影像。以下是具體操作方法
processor = Emu3Processor.from_pretrained("BAAI/Emu3-Gen-hf")
model = Emu3ForConditionalGeneration.from_pretrained("BAAI/Emu3-Gen-hf", torch_dtype="bfloat16", device_map="auto", attn_implementation="flash_attention_2")
inputs = processor(
text=["a portrait of young girl. masterpiece, film grained, best quality.", "a dog running under the rain"],
padding=True,
return_tensors="pt",
return_for_image_generation=True,
)
inputs = inputs.to(device="cuda:0", dtype=torch.bfloat16)
neg_prompt = "lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry."
neg_inputs = processor(text=[neg_prompt] * 2, return_tensors="pt").to(device="cuda:0")
image_sizes = inputs.pop("image_sizes")
HEIGHT, WIDTH = image_sizes[0]
VISUAL_TOKENS = model.vocabulary_mapping.image_tokens
def prefix_allowed_tokens_fn(batch_id, input_ids):
height, width = HEIGHT, WIDTH
visual_tokens = VISUAL_TOKENS
image_wrapper_token_id = torch.tensor([processor.tokenizer.image_wrapper_token_id], device=model.device)
eoi_token_id = torch.tensor([processor.tokenizer.eoi_token_id], device=model.device)
eos_token_id = torch.tensor([processor.tokenizer.eos_token_id], device=model.device)
pad_token_id = torch.tensor([processor.tokenizer.pad_token_id], device=model.device)
eof_token_id = torch.tensor([processor.tokenizer.eof_token_id], device=model.device)
eol_token_id = processor.tokenizer.encode("<|extra_200|>", return_tensors="pt")[0]
position = torch.nonzero(input_ids == image_wrapper_token_id, as_tuple=True)[0][0]
offset = input_ids.shape[0] - position
if offset % (width + 1) == 0:
return (eol_token_id, )
elif offset == (width + 1) * height + 1:
return (eof_token_id, )
elif offset == (width + 1) * height + 2:
return (eoi_token_id, )
elif offset == (width + 1) * height + 3:
return (eos_token_id, )
elif offset > (width + 1) * height + 3:
return (pad_token_id, )
else:
return visual_tokens
out = model.generate(
**inputs,
max_new_tokens=50_000, # make sure to have enough tokens for one image
prefix_allowed_tokens_fn=prefix_allowed_tokens_fn,
return_dict_in_generate=True,
negative_prompt_ids=neg_inputs.input_ids, # indicate for Classifier-Free Guidance
negative_prompt_attention_mask=neg_inputs.attention_mask,
)
image = model.decode_image_tokens(out.sequences[:, inputs.input_ids.shape[1]: ], height=HEIGHT, width=WIDTH)
images = processor.postprocess(list(image.float()), return_tensors="PIL.Image.Image") # internally we convert to np but it's not supported in bf16 precision
for i, image in enumerate(images['pixel_values']):
image.save(f"result{i}.png")
Emu3Config
class transformers.Emu3Config
< 來源 >( vq_config: typing.Union[dict, transformers.models.emu3.configuration_emu3.Emu3VQVAEConfig] = None text_config: typing.Union[dict, transformers.models.emu3.configuration_emu3.Emu3TextConfig] = None vocabulary_map: typing.Optional[dict[int, int]] = None **kwargs )
這是用於儲存 Emu3Model 配置的配置類。它用於根據指定的引數例項化 Emu3 模型,定義模型架構。使用預設值例項化配置將產生與 Emu3-community/Emu3-Chat-hf 類似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請閱讀 PretrainedConfig 的文件。
Emu3VQVAEConfig
class transformers.Emu3VQVAEConfig
< 來源 >( codebook_size: int = 32768 embed_dim: int = 4 latent_channels: int = 4 double_latent: bool = False in_channels: int = 3 out_channels: int = 3 temporal_downsample_factor: int = 4 base_channels: int = 256 channel_multiplier: list = [1, 2, 2, 4] num_res_blocks: int = 2 attn_resolutions: list = [3] hidden_size: int = 1024 num_attention_heads: int = 1 attention_dropout: float = 0.0 **kwargs )
引數
- codebook_size (
int
, 可選, 預設為 32768) — VQ 模型的碼本大小。 - embed_dim (
int
, 可選, 預設為 4) — 碼本中量化向量的維度。 - latent_channels (
int
, 可選, 預設為 4) — 編碼器輸出通道和解碼器輸入通道的維度。 - double_latent (
bool
, 可選, 預設為False
) — 是否將編碼器的輸出維度加倍。 - in_channels (
int
, 可選, 預設為 3) — 編碼器輸入通道。 - out_channels (
int
, 可選, 預設為 3) — 解碼器輸出通道。 - temporal_downsample_factor (
int
, 可選, 預設為 4) — 時間下采樣因子。 - base_channels (
int
, 可選, 預設為 256) — 中間塊的基本通道數。 - channel_multiplier (
list[int]
, 可選, 預設為[1, 2, 2, 4]
) — 中間塊的通道縮放因子。 - num_res_blocks (
int
, 可選, 預設為 2) — 每個階段的殘差塊數量。 - attn_resolutions (
list[int]
, 可選, 預設為[3]
) — 應用注意力機制的階段索引。 - hidden_size (
int
, 可選, 預設為 1024) — 注意力層中隱藏表示的維度。 - num_attention_heads (
int
, 可選, 預設為 1) — 每個注意力層的注意力頭數量。 - attention_dropout (
float
, 可選, 預設為 0.0) — 注意力機率的 dropout 比率。
這是用於儲存 Emu3VQVAE 配置的配置類。它用於根據指定的引數例項化 VQ-VAE 模型,定義模型架構。使用預設值例項化配置將產生與 Emu3 論文中提出的 VQ 模型類似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請閱讀 PretrainedConfig 的文件。
>>> from transformers import Emu3VQVAE, Emu3VQVAEConfig
>>> # Initializing a video VQ model of Emu3 configuration
>>> configuration = Emu3VQVAEConfig()
>>> # Initializing a model from the Emu3 VQ model style configuration
>>> model = Emu3VQVAE(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
Emu3TextConfig
class transformers.Emu3TextConfig
< 來源 >( vocab_size: int = 184622 hidden_size: int = 4096 intermediate_size: int = 14336 num_hidden_layers: int = 32 num_attention_heads: int = 32 num_key_value_heads: typing.Optional[int] = 8 hidden_act: str = 'silu' max_position_embeddings: int = 9216 rms_norm_eps: float = 1e-05 use_cache: bool = True pad_token_id: int = 151643 bos_token_id: int = 151849 eos_token_id: int = 151850 tie_word_embeddings: bool = False rope_theta: float = 1000000.0 rope_scaling: typing.Optional = None mlp_bias = False attention_bias = False attention_dropout: float = 0.1 initializer_range: float = 0.02 **kwargs )
引數
- vocab_size (
int
, 可選, 預設為 184622) — Emu3 模型的詞彙表大小。定義了呼叫 Emu3Model 時傳遞的inputs_ids
可以表示的不同 token 的數量 - hidden_size (
int
, 可選, 預設為 4096) — 隱藏表示的維度。 - intermediate_size (
int
, 可選, 預設為 14336) — MLP 表示的維度。 - num_hidden_layers (
int
, 可選, 預設為 32) — Transformer 解碼器中的隱藏層數量。 - num_attention_heads (
int
, 可選, 預設為 32) — Transformer 解碼器中每個注意力層的注意力頭數量。 - num_key_value_heads (
int
, 可選, 預設為 8) — 用於實現分組查詢注意力(Grouped Query Attention)的 key_value 頭數量。如果num_key_value_heads=num_attention_heads
,模型將使用多頭注意力 (MHA);如果num_key_value_heads=1
,模型將使用多查詢注意力 (MQA);否則,將使用 GQA。在將多頭檢查點轉換為 GQA 檢查點時,每個組的鍵和值頭應透過對其組內的所有原始頭進行均值池化來構建。更多詳細資訊,請檢視 [此論文](https://huggingface.co/papers/2305.13245)。如果未指定,則預設為num_attention_heads
。 - hidden_act (
str
或function
, 可選, 預設為"silu"
) — 解碼器中的非線性啟用函式(函式或字串)。 - max_position_embeddings (
int
, 可選, 預設為 9216) — 該模型可能使用的最大序列長度。Emu 支援高達 9216 個 token。 - rms_norm_eps (
float
, 可選, 預設為 1e-05) — RMS 歸一化層使用的 epsilon 值。 - use_cache (
bool
, 可選, 預設為True
) — 模型是否應返回最後一個 key/values attention(並非所有模型都使用)。僅當config.is_decoder=True
時才相關。 - pad_token_id (
int
, 可選, 預設為 151643) — 填充 token ID。 - bos_token_id (
int
, 可選, 預設為 151849) — 流起始 token ID。 - eos_token_id (
int
, 可選, 預設為 151850) — 流結束 token ID。 - tie_word_embeddings (
bool
, 可選, 預設為False
) — 是否繫結詞嵌入。 - rope_theta (
float
, 可選, 預設為 1000000.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 嵌入的縮放因子。在大多數縮放型別中,因子 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 高頻分量的縮放因子。 - mlp_bias (
bool
, 可選, 預設為False
) — 在 MLP 層中的 up_proj、down_proj 和 gate_proj 層是否使用偏置。 - attention_bias (
bool
, 可選, 預設為False
) — 在自注意力過程中,查詢、鍵、值和輸出投影層是否使用偏置。 - attention_dropout (
float
, 可選, 預設為 0.1) — 注意力機率的 dropout 比率。 - initializer_range (
float
, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。
這是用於儲存 Emu3TextModel 配置的配置類。它用於根據指定的引數例項化一個 emu3 模型,定義模型架構。使用預設值例項化配置將生成與 Emu3-community/Emu3-Chat-hf 相似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請閱讀 PretrainedConfig 的文件。
>>> from transformers import Emu3Model, Emu3Config
>>> # Initializing a Emu3-community/Emu3-Chat-hf style configuration
>>> configuration = Emu3Config()
>>> # Initializing a model from the Emu3-community/Emu3-Chat-hf style configuration
>>> model = Emu3Model(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
Emu3Processor
class transformers.Emu3Processor
< 原始檔 >( image_processor tokenizer chat_template = None **kwargs )
引數
- image_processor (Emu3ImageProcessor) — 影像處理器是必需輸入。
- tokenizer (
Emu3TokenizerFast
) — 分詞器是必需輸入。 - chat_template (
str
, 可選) — 一個 Jinja 模板,用於將聊天中的訊息列表轉換為可分詞的字串。
構建一個 Emu3 處理器,它將 Emu3 影像處理器和 GPT2 分詞器封裝到一個處理器中。
Emu3Processor 提供了 Emu3ImageProcessor 和 GPT2TokenizerFast 的所有功能。有關更多資訊,請參閱 __call__()
和 decode()。
此方法將其所有引數轉發到 Emu3TokenizerFast 的 batch_decode()。有關更多資訊,請參閱此方法的文件字串。
Emu3ImageProcessor
class transformers.Emu3ImageProcessor
< 原始檔 >( do_resize: bool = True resample: Resampling = <Resampling.BICUBIC: 3> do_rescale: bool = True rescale_factor: typing.Union[int, 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_convert_rgb: bool = True do_pad: bool = True min_pixels: int = 262144 max_pixels: int = 1048576 spatial_factor: int = 8 **kwargs )
引數
- do_resize (
bool
, 可選, 預設為True
) — 是否調整影像的(高,寬)尺寸。 - resample (
PILImageResampling
, 可選, 預設為Resampling.BICUBIC
) — 調整影像大小時使用的重取樣濾波器。 - do_rescale (
bool
, 可選, 預設為True
) — 是否根據指定的比例rescale_factor
重新縮放影像。 - rescale_factor (
int
或float
, 可選, 預設為1/255
) — 如果重新縮放影像,則使用的縮放因子。 - do_normalize (
bool
, 可選, 預設為True
) — 是否規範化影像。 - image_mean (
float
或list[float]
, 可選, 預設為[0.48145466, 0.4578275, 0.40821073]
) — 如果規範化影像,則使用的平均值。這是一個浮點數或影像中每個通道的浮點數列表。 - image_std (
float
或list[float]
, 可選, 預設為[0.26862954, 0.26130258, 0.27577711]
) — 如果規範化影像,則使用的標準差。這是一個浮點數或影像中每個通道的浮點數列表。 - do_convert_rgb (
bool
, 可選, 預設為True
) — 是否將影像轉換為 RGB 格式。 - do_pad (
bool
, 可選, 預設為True
) — 是否填充影像。如果為True
,將批次中影像的補丁維度填充到批次中最大補丁數量。填充將應用於底部和右側,填充值為零。 - min_pixels (
int
, 可選, 預設為512 * 512
) — 用於調整影像大小的最小畫素數。 - max_pixels (
int
, 可選, 預設為1024 * 1024
) — 用於調整影像大小的最大畫素數。 - spatial_factor (
int
, 可選, 預設為 8) — 影像在特徵提取階段將被下采樣的空間下采樣因子。
構建一個 Emu3 影像處理器,它根據原始影像動態調整影像大小。
preprocess
< 原始檔 >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] do_resize: typing.Optional[bool] = None size: typing.Optional[dict[str, int]] = None resample: 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_convert_rgb: typing.Optional[bool] = None do_pad: bool = True return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None data_format: typing.Optional[transformers.image_utils.ChannelDimension] = <ChannelDimension.FIRST: 'channels_first'> input_data_format: typing.Union[str, transformers.image_utils.ChannelDimension, NoneType] = None )
引數
- images (
ImageInput
) — 要預處理的影像。期望單個或批次影像的畫素值範圍為 0 到 255。如果傳入的影像畫素值在 0 到 1 之間,請將do_rescale=False
。 - do_resize (
bool
, 可選, 預設為self.do_resize
) — 是否調整影像大小。 - size (
dict[str, int]
, 可選, 預設為self.size
) — 調整大小後圖像的尺寸。影像的最短邊將調整為 size["shortest_edge"],最長邊將調整為保持輸入寬高比。 - 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_convert_rgb (
bool
, 可選, 預設為self.do_convert_rgb
) — 是否將影像轉換為 RGB 格式。 - do_pad (
bool
, 可選, 預設為True
) — 是否填充影像。如果為True
,將批次中影像的補丁維度填充到批次中最大補丁數量。填充將應用於底部和右側,填充值為零。 - 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
型別的批次。
- 未設定:返回
- data_format (
ChannelDimension
或str
, 可選, 預設為ChannelDimension.FIRST
) — 輸出影像的通道維度格式。可以是以下之一:"channels_first"
或ChannelDimension.FIRST
:影像格式為 (num_channels, height, width)。"channels_last"
或ChannelDimension.LAST
:影像格式為 (height, width, num_channels)。- 未設定:使用輸入影像的通道維度格式。
- 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)。
Emu3VQVAE
class transformers.Emu3VQVAE
< 原始檔 >( config: Emu3VQVAEConfig )
引數
- config (Emu3VQVAEConfig) — 包含模型所有引數的模型配置類。使用配置檔案初始化並不會載入與模型相關的權重,只加載配置。請檢視 from_pretrained() 方法來載入模型權重。
Emu3 中用於將影像編碼/解碼為離散 token 的 VQ-VAE 模型。此模型遵循 Oran Gafni, Adam Polyak, Oron Ashual, Shelly Sheynin, Devi Parikh, and Yaniv Taigman 的“Make-a-scene: Scene-based text-to-image generation with human priors”論文。
此模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭等)。
此模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件以獲取所有與通用用法和行為相關的事項。
定義每次呼叫時執行的計算。
應由所有子類覆蓋。
儘管前向傳播的配方需要在該函式中定義,但之後應該呼叫 Module
例項而不是它,因為前者負責執行註冊的鉤子,而後者則默默地忽略它們。
Emu3TextModel
class transformers.Emu3TextModel
< source >( config: Emu3Config )
引數
- config (Emu3Config) — 模型的配置類,包含模型的所有引數。使用配置檔案初始化並不會載入與模型相關的權重,只加載配置。請檢視 from_pretrained() 方法來載入模型權重。
裸 Emu3 文字模型,直接輸出原始隱藏狀態,不帶任何特定頭部。
此模型繼承自 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 past_key_values: typing.Optional[transformers.cache_utils.Cache] = 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 cache_position: typing.Optional[torch.LongTensor] = None **flash_attn_kwargs: typing_extensions.Unpack[transformers.modeling_flash_attention_utils.FlashAttentionKwargs] ) → transformers.modeling_outputs.BaseModelOutputWithPast 或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 詞彙表中輸入序列標記的索引。預設情況下,填充將被忽略。索引可以使用 AutoTokenizer 獲取。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免對填充標記索引執行注意力操作的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示 未被掩蓋 的標記,
- 0 表示 被掩蓋 的標記。
- position_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 輸入序列標記在位置嵌入中的位置索引。選擇範圍為[0, config.n_positions - 1]
。 - past_key_values (
~cache_utils.Cache
,可選) — 預計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼上一階段返回的past_key_values
,當use_cache=True
或config.use_cache=True
時。允許兩種格式:
- 一個 Cache 例項,參見我們的 kv cache 指南;
- 一個長度為
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)
,而不是所有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
。 - cache_position (
torch.LongTensor
,形狀為(sequence_length)
,可選) — 指示輸入序列標記在序列中位置的索引。與position_ids
不同,此張量不受填充影響。它用於在正確位置更新快取並推斷完整的序列長度。
返回
transformers.modeling_outputs.BaseModelOutputWithPast 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.BaseModelOutputWithPast 或一個 torch.FloatTensor
元組(如果傳入 return_dict=False
或 config.return_dict=False
),包含根據配置 (Emu3Config) 和輸入的不同元素。
-
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 cache 指南。包含預計算的隱藏狀態(自注意力塊中的鍵和值,如果
config.is_encoder_decoder=True
則可選地在交叉注意力塊中),可用於加速順序解碼(參見past_key_values
輸入)。 -
hidden_states (
tuple(torch.FloatTensor)
,可選,當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) — 形狀為(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元組(一個用於嵌入層輸出,如果模型有嵌入層,+ 一個用於每個層的輸出)。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple(torch.FloatTensor)
,可選,當傳入output_attentions=True
或config.output_attentions=True
時返回) — 形狀為(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元組(每個層一個)。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
Emu3TextModel 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳遞的實現需要在該函式中定義,但隨後應呼叫 Module
例項而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
Emu3Model
透過上取樣使用 VQGAN 模組將生成的影像標記解碼為連續畫素值。
forward
< source >( input_ids: LongTensor = None pixel_values: FloatTensor = None image_sizes: Tensor = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[transformers.cache_utils.Cache] = 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 或 tuple(torch.FloatTensor)
引數
- input_ids (形狀為
(batch_size, sequence_length)
的torch.LongTensor
) — 詞彙表中輸入序列標記的索引。預設情況下,填充將被忽略。索引可以使用 AutoTokenizer 獲取。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- pixel_values (形狀為
(batch_size, num_channels, image_size, image_size)
的torch.FloatTensor
) — 對應於輸入影像的張量。畫素值可以使用{image_processor_class}
獲取。有關詳細資訊,請參見{image_processor_class}.__call__
({processor_class}
使用{image_processor_class}
處理影像)。 - image_sizes (形狀為
(batch_size, 2)
的torch.LongTensor
) — 批處理中影像的大小,每個影像為(高度,寬度)。影像大小可以使用 AutoImageProcessor 獲取。有關詳細資訊,請參見 Emu3ImageProcessor.call() ([]Emu3Processor
] 使用 Emu3ImageProcessor 處理影像)。 - 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]
。 - past_key_values (
~cache_utils.Cache
,可選) — 預計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼上一階段返回的past_key_values
,當use_cache=True
或config.use_cache=True
時。允許兩種格式:
- 一個 Cache 例項,參見我們的 kv cache 指南;
- 一個長度為
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)
,而不是所有input_ids
形狀為(batch_size, sequence_length)
。 - 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.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.CausalLMOutputWithPast 或一個 torch.FloatTensor
元組(如果傳入 return_dict=False
或 config.return_dict=False
),包含根據配置 (Emu3Config) 和輸入的不同元素。
-
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 cache 指南。包含預計算的隱藏狀態(自注意力塊中的鍵和值),可用於(參見
past_key_values
輸入)加速順序解碼。 -
hidden_states (
tuple(torch.FloatTensor)
,可選,當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) — 形狀為(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元組(一個用於嵌入層輸出,如果模型有嵌入層,+ 一個用於每個層的輸出)。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple(torch.FloatTensor)
,可選,當傳入output_attentions=True
或config.output_attentions=True
時返回) — 形狀為(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元組(每個層一個)。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
Emu3Model 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳遞的實現需要在該函式中定義,但隨後應呼叫 Module
例項而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
使用 VQGAN 模組將影像標記化為離散標記,並使用文字嵌入層嵌入它們。
使用 VQGAN 模組將影像標記化為離散標記。將獲得的影像標記轉換為 BPE 標記並用“boi”和“eoi”特殊標記包裝。
Emu3ForCausalLM
class transformers.Emu3ForCausalLM
< source >( config )
引數
- config (Emu3ForCausalLM) — 模型的配置類,包含模型的所有引數。使用配置檔案初始化並不會載入與模型相關的權重,只加載配置。請檢視 from_pretrained() 方法來載入模型權重。
用於因果語言建模的 Emu3 模型。
此模型繼承自 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 past_key_values: typing.Optional[transformers.cache_utils.Cache] = 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 cache_position: typing.Optional[torch.LongTensor] = None logits_to_keep: typing.Union[int, torch.Tensor] = 0 **kwargs: typing_extensions.Unpack[transformers.models.emu3.modeling_emu3.KwargsForCausalLM] ) → transformers.modeling_outputs.CausalLMOutputWithPast 或 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]
。 - past_key_values (
~cache_utils.Cache
,可選) — 預計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼上一階段返回的past_key_values
,當use_cache=True
或config.use_cache=True
時。允許兩種格式:
- 一個 Cache 例項,參見我們的 kv cache 指南;
- 一個長度為
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)
,而不是所有input_ids
形狀為(batch_size, sequence_length)
。 - 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
。 - cache_position (
torch.LongTensor
,形狀為(sequence_length)
,可選) — 表示輸入序列標記在序列中位置的索引。與position_ids
不同,此張量不受填充影響。它用於在正確位置更新快取並推斷完整的序列長度。 - logits_to_keep (
Union[int, torch.Tensor]
,預設為0
) — 如果是int
,則計算最後logits_to_keep
個標記的 logits。如果為0
,則計算所有input_ids
的 logits(特殊情況)。生成時只需要最後一個標記的 logits,只為該標記計算可以節省記憶體,這對於長序列或大詞彙量來說非常重要。如果為torch.Tensor
,則必須是 1D,對應於序列長度維度中要保留的索引。這在使用 packed tensor 格式(批次和序列長度的單維度)時很有用。
返回
transformers.modeling_outputs.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.CausalLMOutputWithPast 或一個 torch.FloatTensor
元組(如果傳入 return_dict=False
或 config.return_dict=False
),包含根據配置 (Emu3Config) 和輸入的不同元素。
-
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 cache 指南。包含預計算的隱藏狀態(自注意力塊中的鍵和值),可用於(參見
past_key_values
輸入)加速順序解碼。 -
hidden_states (
tuple(torch.FloatTensor)
,可選,當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) — 形狀為(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元組(一個用於嵌入層輸出,如果模型有嵌入層,+ 一個用於每個層的輸出)。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple(torch.FloatTensor)
,可選,當傳入output_attentions=True
或config.output_attentions=True
時返回) — 形狀為(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元組(每個層一個)。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
Emu3ForCausalLM
forward 方法,重寫了 __call__
特殊方法。
儘管前向傳遞的實現需要在該函式中定義,但隨後應呼叫 Module
例項而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
示例
>>> from transformers import Emu3Processor, Emu3ForConditionalGeneration
>>> import torch
>>> import requests
>>> from PIL import Image
>>> model = Emu3ForCausalLM.from_pretrained("BAAI/Emu3-Chat-hf", torch_dtype=torch.bfloat16)
>>> processor = Emu3Processor.from_pretrained("BAAI/Emu3-Chat-hf")
>>> inputs = processor(text=["Can you write me a poem about winter."], return_tensors="pt").to(model.device)
>>> generated_ids = model.generate(**inputs, max_new_tokens=100, do_sample=False)
>>> processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
Emu3ForConditionalGeneration
forward
< 來源 >( input_ids: LongTensor = None pixel_values: FloatTensor = None image_sizes: Tensor = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[transformers.cache_utils.Cache] = 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 labels: typing.Optional[torch.LongTensor] = None logits_to_keep: typing.Union[int, torch.Tensor] = 0 **kwargs: typing_extensions.Unpack[transformers.models.emu3.modeling_emu3.KwargsForCausalLM] ) → transformers.modeling_outputs.CausalLMOutputWithPast 或 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}
處理影像)。 - image_sizes (
torch.LongTensor
,形狀為(batch_size, 2)
) — 批次中影像的大小,每個影像為 (高度, 寬度)。影像大小可以透過AutoImageProcessor
獲取。有關詳細資訊,請參見Emu3ImageProcessor.__call__()
([Emu3Processor
] 使用Emu3ImageProcessor
處理影像)。 - attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 掩碼,避免對填充標記索引執行注意力。掩碼值選擇在[0, 1]
之間:1
表示未被掩碼的標記,0
表示被掩碼的標記。
- position_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 每個輸入序列標記在位置嵌入中的位置索引。選擇範圍為[0, config.n_positions - 1]
。 - past_key_values (
~cache_utils.Cache
, 可選) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼上一階段返回的past_key_values
,當use_cache=True
或config.use_cache=True
時。允許兩種格式:
Cache
例項,請參閱我們的 kv 快取指南;- 長度為
config.n_layers
的tuple(torch.FloatTensor)
元組,每個元組包含兩個形狀為(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
不同,此張量不受填充影響。它用於在正確位置更新快取並推斷完整的序列長度。 - labels (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 用於計算掩碼語言建模損失的標籤。索引應在[0, ..., config.vocab_size]
或 -100 之間(參見input_ids
文件字串)。索引設定為-100
的標記將被忽略(掩碼),損失僅針對標籤在[0, ..., config.vocab_size]
中的標記計算。 - logits_to_keep (
Union[int, torch.Tensor]
,預設為0
) — 如果是int
,則計算最後logits_to_keep
個標記的 logits。如果為0
,則計算所有input_ids
的 logits(特殊情況)。生成時只需要最後一個標記的 logits,只為該標記計算可以節省記憶體,這對於長序列或大詞彙量來說非常重要。如果為torch.Tensor
,則必須是 1D,對應於序列長度維度中要保留的索引。這在使用 packed tensor 格式(批次和序列長度的單維度)時很有用。
返回
transformers.modeling_outputs.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.CausalLMOutputWithPast 或一個 torch.FloatTensor
元組(如果傳入 return_dict=False
或 config.return_dict=False
),包含根據配置 (Emu3Config) 和輸入的不同元素。
-
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 cache 指南。包含預計算的隱藏狀態(自注意力塊中的鍵和值),可用於(參見
past_key_values
輸入)加速順序解碼。 -
hidden_states (
tuple(torch.FloatTensor)
,可選,當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) — 形狀為(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元組(一個用於嵌入層輸出,如果模型有嵌入層,+ 一個用於每個層的輸出)。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple(torch.FloatTensor)
,可選,當傳入output_attentions=True
或config.output_attentions=True
時返回) — 形狀為(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元組(每個層一個)。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
Emu3ForConditionalGeneration
forward 方法,重寫了 __call__
特殊方法。
儘管前向傳遞的實現需要在該函式中定義,但隨後應呼叫 Module
例項而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
示例
>>> from transformers import Emu3Processor, Emu3ForConditionalGeneration
>>> import torch
>>> import requests
>>> from PIL import Image
>>> model = Emu3ForConditionalGeneration.from_pretrained("BAAI/Emu3-Chat-hf", torch_dtype=torch.bfloat16)
>>> processor = Emu3Processor.from_pretrained("BAAI/Emu3-Chat-hf")
>>> conversation = [
... {
... "role": "system",
... "content": [
... {"type": "text", "text": "You are a helpful assistant."},
... ],
... },
... {
... "role": "user",
... "content": [
... {"type": "image"},
... {"type": "text", "text": "Please describe the image."},
... ],
... },
... ]
>>> prompt = processor.apply_chat_template(conversation, add_generation_prompt=True)
>>> image = Image.open(requests.get("https://www.ilankelman.org/stopsigns/australia.jpg", stream=True).raw)
>>> inputs = processor(images=[image], text=[prompt], return_tensors="pt").to(model.device, torch.bfloat16)
>>> generated_ids = model.generate(**inputs, max_new_tokens=100, do_sample=False)
>>> processor.batch_decode(generated_ids, skip_special_tokens=True)[0]