Transformers 文件
MusicGen Melody
並獲得增強的文件體驗
開始使用
MusicGen Melody
概述
MusicGen Melody 模型由 Jade Copet、Felix Kreuk、Itai Gat、Tal Remez、David Kant、Gabriel Synnaeve、Yossi Adi 和 Alexandre Défossez 在 簡單可控的音樂生成 中提出。
MusicGen Melody 是一個單階段自迴歸 Transformer 模型,能夠根據文字描述或音訊提示生成高質量的音樂樣本。文字描述透過凍結的文字編碼器模型,以獲得隱藏狀態表示序列。然後,MusicGen 被訓練來預測離散的音訊令牌(或*音訊程式碼*),並以這些隱藏狀態為條件。這些音訊令牌隨後使用音訊壓縮模型(例如 EnCodec)進行解碼,以恢復音訊波形。
透過高效的令牌交錯模式,MusicGen 不需要文字/音訊提示的自監督語義表示,從而無需級聯多個模型來預測一組碼本(例如分層或上取樣)。相反,它能夠一次性生成所有碼本。
論文摘要如下:
我們解決了條件音樂生成任務。我們引入 MusicGen,一個單一的語言模型 (LM),它操作多個壓縮離散音樂表示(即令牌)流。與之前的工作不同,MusicGen 由一個單階段 Transformer LM 和高效的令牌交錯模式組成,這消除了級聯多個模型(例如分層或上取樣)的需要。遵循這種方法,我們演示了 MusicGen 如何生成高質量的樣本,同時以文字描述或旋律特徵為條件,從而更好地控制生成的輸出。我們進行了廣泛的實證評估,包括自動和人工研究,表明所提出的方法在標準文字到音樂基準上優於評估的基線。透過消融研究,我們闡明瞭構成 MusicGen 的每個元件的重要性。
該模型由 ylacombe 貢獻。原始程式碼可以在 此處 找到。預訓練的檢查點可以在 Hugging Face Hub 上找到。
與 MusicGen 的區別
與 MusicGen 有兩個主要區別
- 這裡的音訊提示用作生成音訊樣本的條件訊號,而在 MusicGen 中則用於音訊續接。
- 條件文字和音訊訊號被連線到解碼器的隱藏狀態,而不是像 MusicGen 中那樣用作交叉注意力訊號。
[!NOTE] 當使用除 “eager” 之外的所有注意力實現時,`head_mask` 引數將被忽略。如果您有 `head_mask` 並希望它生效,請使用 `XXXModel.from_pretrained(model_id, attn_implementation="eager")` 載入模型
生成
MusicGen Melody 相容兩種生成模式:貪婪模式和取樣模式。實際上,取樣模式比貪婪模式能帶來顯著更好的結果,因此我們鼓勵儘可能使用取樣模式。取樣模式預設啟用,可以透過在呼叫 `MusicgenMelodyForConditionalGeneration.generate()` 時設定 `do_sample=True`,或者透過覆蓋模型的生成配置(如下所示)來明確指定。
Transformers 支援 MusicGen Melody 的單聲道(1 通道)和立體聲(2 通道)變體。單聲道版本生成一組碼本。立體聲版本生成兩組碼本,每個通道(左/右)一個,每組碼本都透過音訊壓縮模型獨立解碼。每個通道的音訊流組合在一起,形成最終的立體聲輸出。
音訊條件生成
該模型可以透過使用 MusicgenMelodyProcessor 預處理輸入,根據文字和音訊提示生成音訊樣本。
在以下示例中,我們使用 🤗 Datasets 庫載入音訊檔案,該庫可以透過以下命令進行 pip 安裝
pip install --upgrade pip
pip install datasets[audio]
我們即將使用的音訊檔案載入如下
>>> from datasets import load_dataset
>>> dataset = load_dataset("sanchit-gandhi/gtzan", split="train", streaming=True)
>>> sample = next(iter(dataset))["audio"]
理想情況下,音訊提示應不含通常由鼓和貝斯等樂器產生的低頻訊號。Demucs 模型可用於將人聲和其他訊號與鼓和貝斯部分分離。
如果您希望使用 Demucs,您首先需要遵循此處的安裝步驟,然後才能使用以下程式碼片段
from demucs import pretrained
from demucs.apply import apply_model
from demucs.audio import convert_audio
import torch
wav = torch.tensor(sample["array"]).to(torch.float32)
demucs = pretrained.get_model('htdemucs')
wav = convert_audio(wav[None], sample["sampling_rate"], demucs.samplerate, demucs.audio_channels)
wav = apply_model(demucs, wav[None])
然後您可以使用以下程式碼片段生成音樂
>>> from transformers import AutoProcessor, MusicgenMelodyForConditionalGeneration
>>> processor = AutoProcessor.from_pretrained("facebook/musicgen-melody")
>>> model = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody")
>>> inputs = processor(
... audio=wav,
... sampling_rate=demucs.samplerate,
... text=["80s blues track with groovy saxophone"],
... padding=True,
... return_tensors="pt",
... )
>>> audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256)
您也可以直接傳遞音訊訊號而不使用 Demucs,儘管生成質量可能會下降
>>> from transformers import AutoProcessor, MusicgenMelodyForConditionalGeneration
>>> processor = AutoProcessor.from_pretrained("facebook/musicgen-melody")
>>> model = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody")
>>> inputs = processor(
... audio=sample["array"],
... sampling_rate=sample["sampling_rate"],
... text=["80s blues track with groovy saxophone"],
... padding=True,
... return_tensors="pt",
... )
>>> audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256)
音訊輸出是形狀為 `(batch_size, num_channels, sequence_length)` 的三維 PyTorch 張量。要收聽生成的音訊樣本,您可以在 ipynb 筆記本中播放它們
from IPython.display import Audio
sampling_rate = model.config.audio_encoder.sampling_rate
Audio(audio_values[0].numpy(), rate=sampling_rate)
或者使用第三方庫(例如 `soundfile`)將其儲存為 `.wav` 檔案
>>> import soundfile as sf
>>> sampling_rate = model.config.audio_encoder.sampling_rate
>>> sf.write("musicgen_out.wav", audio_values[0].T.numpy(), sampling_rate)
僅文字條件生成
同樣的 MusicgenMelodyProcessor 可用於預處理僅文字提示。
>>> from transformers import AutoProcessor, MusicgenMelodyForConditionalGeneration
>>> processor = AutoProcessor.from_pretrained("facebook/musicgen-melody")
>>> model = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody")
>>> inputs = processor(
... text=["80s pop track with bassy drums and synth", "90s rock song with loud guitars and heavy drums"],
... padding=True,
... return_tensors="pt",
... )
>>> audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256)
`guidance_scale` 用於無分類器指導 (CFG),設定條件 logits(從文字提示預測)和無條件 logits(從無條件或“空”提示預測)之間的權重。更高的指導尺度鼓勵模型生成與輸入提示更緊密相關的樣本,通常以犧牲較差的音訊質量為代價。透過設定 `guidance_scale > 1` 啟用 CFG。為獲得最佳結果,請使用 `guidance_scale=3`(預設)。
您也可以批次生成
>>> from transformers import AutoProcessor, MusicgenMelodyForConditionalGeneration
>>> from datasets import load_dataset
>>> processor = AutoProcessor.from_pretrained("facebook/musicgen-melody")
>>> model = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody")
>>> # take the first quarter of the audio sample
>>> sample_1 = sample["array"][: len(sample["array"]) // 4]
>>> # take the first half of the audio sample
>>> sample_2 = sample["array"][: len(sample["array"]) // 2]
>>> inputs = processor(
... audio=[sample_1, sample_2],
... sampling_rate=sample["sampling_rate"],
... text=["80s blues track with groovy saxophone", "90s rock song with loud guitars and heavy drums"],
... padding=True,
... return_tensors="pt",
... )
>>> audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256)
無條件生成
無條件(或“空”)生成的輸入可以透過 MusicgenMelodyProcessor.get_unconditional_inputs() 方法獲得
>>> from transformers import MusicgenMelodyForConditionalGeneration, MusicgenMelodyProcessor
>>> model = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody")
>>> unconditional_inputs = MusicgenMelodyProcessor.from_pretrained("facebook/musicgen-melody").get_unconditional_inputs(num_samples=1)
>>> audio_values = model.generate(**unconditional_inputs, do_sample=True, max_new_tokens=256)
生成配置
控制生成過程的預設引數,例如取樣、指導尺度和生成的令牌數量,可以在模型的生成配置中找到,並根據需要進行更新
>>> from transformers import MusicgenMelodyForConditionalGeneration
>>> model = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody")
>>> # inspect the default generation config
>>> model.generation_config
>>> # increase the guidance scale to 4.0
>>> model.generation_config.guidance_scale = 4.0
>>> # decrease the max length to 256 tokens
>>> model.generation_config.max_length = 256
請注意,傳遞給生成方法的任何引數都將**覆蓋**生成配置中的引數,因此在呼叫生成時設定 `do_sample=False` 將覆蓋生成配置中的 `model.generation_config.do_sample` 設定。
模型結構
MusicGen 模型可分解為三個不同的階段
- 文字編碼器:將文字輸入對映到隱藏狀態表示序列。預訓練的 MusicGen 模型使用來自 T5 或 Flan-T5 的凍結文字編碼器。
- MusicGen Melody 解碼器:一個語言模型 (LM),根據編碼器隱藏狀態表示自動迴歸生成音訊令牌(或程式碼)
- 音訊解碼器:用於從解碼器預測的音訊令牌中恢復音訊波形。
因此,MusicGen 模型既可以作為獨立的解碼器模型使用,對應於 MusicgenMelodyForCausalLM 類,也可以作為包含文字編碼器和音訊編碼器的複合模型使用,對應於 MusicgenMelodyForConditionalGeneration 類。如果只需要從預訓練檢查點載入解碼器,可以透過首先指定正確的配置來載入,或者透過複合模型的 `.decoder` 屬性訪問
>>> from transformers import AutoConfig, MusicgenMelodyForCausalLM, MusicgenMelodyForConditionalGeneration
>>> # Option 1: get decoder config and pass to `.from_pretrained`
>>> decoder_config = AutoConfig.from_pretrained("facebook/musicgen-melody").decoder
>>> decoder = MusicgenMelodyForCausalLM.from_pretrained("facebook/musicgen-melody", **decoder_config.to_dict())
>>> # Option 2: load the entire composite model, but only return the decoder
>>> decoder = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody").decoder
由於文字編碼器和音訊編碼器模型在訓練期間被凍結,MusicGen 解碼器 MusicgenMelodyForCausalLM 可以獨立地在編碼器隱藏狀態和音訊程式碼的資料集上進行訓練。對於推理,訓練好的解碼器可以與凍結的文字編碼器和音訊編碼器結合,以恢復複合 MusicgenMelodyForConditionalGeneration 模型。
檢查點轉換
- 從此處下載原始檢查點後,您可以使用
src/transformers/models/musicgen_melody/convert_musicgen_melody_transformers.py
提供的**轉換指令碼**透過以下命令進行轉換
python src/transformers/models/musicgen_melody/convert_musicgen_melody_transformers.py \
--checkpoint="facebook/musicgen-melody" --pytorch_dump_folder /output/path
技巧
- MusicGen 在 Encodec 的 32kHz 檢查點上進行訓練。您應該確保使用相容版本的 Encodec 模型。
- 取樣模式通常比貪婪模式提供更好的結果 - 您可以透過在呼叫 `MusicgenMelodyForConditionalGeneration.generate()` 時使用變數 `do_sample` 來切換取樣。
MusicgenMelodyDecoderConfig
class transformers.MusicgenMelodyDecoderConfig
< 源 >( vocab_size = 2048 max_position_embeddings = 2048 num_hidden_layers = 24 ffn_dim = 4096 num_attention_heads = 16 layerdrop = 0.0 use_cache = True activation_function = 'gelu' hidden_size = 1024 dropout = 0.1 attention_dropout = 0.0 activation_dropout = 0.0 initializer_factor = 0.02 scale_embedding = False num_codebooks = 4 audio_channels = 1 pad_token_id = 2048 bos_token_id = 2048 eos_token_id = None tie_word_embeddings = False **kwargs )
引數
- vocab_size (
int
, optional, 預設為 2048) — MusicgenMelodyDecoder 模型的詞彙表大小。定義了在呼叫MusicgenMelodyDecoder
時傳遞的inputs_ids
可以表示的不同令牌的數量。 - max_position_embeddings (
int
, optional, 預設為 2048) — 此模型可能使用的最大序列長度。通常,為以防萬一將其設定為較大的值(例如 512 或 1024 或 2048)。 - num_hidden_layers (
int
, optional, 預設為 24) — 解碼器層數。 - ffn_dim (
int
, optional, 預設為 4096) — Transformer 塊中“中間”(通常稱為前饋)層的維度。 - num_attention_heads (
int
, optional, 預設為 16) — Transformer 塊中每個注意力層的注意力頭數量。 - layerdrop (
float
, optional, 預設為 0.0) — 解碼器的 LayerDrop 機率。有關更多詳細資訊,請參閱 [LayerDrop 論文](參見 https://huggingface.co/papers/1909.11556)。 - use_cache (
bool
, optional, 預設為True
) — 模型是否應返回最後的 key/value 注意力(並非所有模型都使用) - activation_function (
str
orfunction
, optional, 預設為"gelu"
) — 解碼器和池化器中的非線性啟用函式(函式或字串)。如果是字串,則支援"gelu"
,"relu"
,"silu"
和"gelu_new"
。 - hidden_size (
int
, optional, 預設為 1024) — 層和池化層的維度。 - dropout (
float
, optional, 預設為 0.1) — 嵌入、text_encoder 和池化器中所有全連線層的 dropout 機率。 - attention_dropout (
float
, optional, 預設為 0.0) — 注意力機率的 dropout 比率。 - activation_dropout (
float
, optional, 預設為 0.0) — 全連線層內部啟用的 dropout 比率。 - initializer_factor (
float
, optional, 預設為 0.02) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。 - scale_embedding (
bool
, optional, 預設為False
) — 透過除以 sqrt(hidden_size) 來縮放嵌入。 - num_codebooks (
int
, optional, 預設為 4) — 轉發到模型的並行碼本數量。 - audio_channels (
int
, optional, 預設為 1) — 模型使用的音訊通道數(單聲道或立體聲)。立體聲模型為左右輸出通道生成單獨的音訊流。單聲道模型生成單個音訊流輸出。 - pad_token_id (
int
, optional, 預設為 2048) — 填充令牌的 ID。 - bos_token_id (
int
, optional, 預設為 2048) — 序列開始令牌的 ID。 - eos_token_id (
int
, optional) — 序列結束令牌的 ID。 - tie_word_embeddings (
bool
, optional, 預設為False
) — 是否將詞嵌入與文字編碼器繫結。
這是用於儲存 MusicgenMelodyDecoder
配置的配置類。它用於根據指定的引數例項化 Musicgen Melody 解碼器,定義模型架構。使用預設值例項化配置將產生與 Musicgen Melody facebook/musicgen-melody 架構相似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請閱讀 PretrainedConfig 的文件。
MusicgenMelodyProcessor
class transformers.MusicgenMelodyProcessor
< 源 >( feature_extractor tokenizer )
引數
- feature_extractor (
MusicgenMelodyFeatureExtractor
) — MusicgenMelodyFeatureExtractor 的例項。特徵提取器是必需的輸入。 - tokenizer (
T5Tokenizer
) — T5Tokenizer 的例項。分詞器是必需的輸入。
構建一個 MusicGen Melody 處理器,它封裝了一個 Wav2Vec2 特徵提取器(用於原始音訊波形處理)和一個 T5 分詞器到一個單一的處理器類中。
MusicgenProcessor 提供了 MusicgenMelodyFeatureExtractor 和 T5Tokenizer 的所有功能。有關更多資訊,請參閱 __call__()
和 decode()。
get_unconditional_inputs
< 源 >( num_samples = 1 return_tensors = 'pt' )
輔助函式,用於獲取無條件生成所需的空輸入,使模型無需特徵提取器或分詞器即可使用。
示例
>>> from transformers import MusicgenMelodyForConditionalGeneration, MusicgenMelodyProcessor
>>> model = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody")
>>> # get the unconditional (or 'null') inputs for the model
>>> processor = MusicgenMelodyProcessor.from_pretrained("facebook/musicgen-melody")
>>> unconditional_inputs = processor.get_unconditional_inputs(num_samples=1)
>>> audio_samples = model.generate(**unconditional_inputs, max_new_tokens=256)
MusicgenMelodyFeatureExtractor
class transformers.MusicgenMelodyFeatureExtractor
< 源 >( feature_size = 12 sampling_rate = 32000 hop_length = 4096 chunk_length = 30 n_fft = 16384 num_chroma = 12 padding_value = 0.0 return_attention_mask = False stem_indices = [3, 2] **kwargs )
引數
- feature_size (
int
, 可選, 預設為 12) — 提取特徵的特徵維度。 - sampling_rate (
int
, 可選, 預設為 32000) — 音訊檔案應以赫茲 (Hz) 表示的數字化取樣率。 - hop_length (
int
, 可選, 預設為 4096) — 用於獲取梅爾頻率係數的短時傅立葉變換重疊視窗的長度。 - chunk_length (
int
, 可選, 預設為 30) — 用於修剪和填充更長或更短音訊序列的sampling_rate
樣本塊的最大數量。 - n_fft (
int
, 可選, 預設為 16384) — 傅立葉變換的大小。 - num_chroma (
int
, 可選, 預設為 12) — 要使用的色度譜段數。 - padding_value (
float
, 可選, 預設為 0.0) — 用於填充音訊的填充值。 - return_attention_mask (
bool
, 可選, 預設為False
) — 是否返回注意力掩碼。可以在呼叫特徵提取器時覆蓋。對於 Whisper 模型,在批次推理時應始終傳遞
attention_mask
,以避免細微的錯誤。 - stem_indices (
list[int]
, 可選, 預設為[3, 2]
) — 如果傳入 demucs 輸出,要提取的莖通道。
構建 MusicgenMelody 特徵提取器。
此特徵提取器繼承自 SequenceFeatureExtractor,其中包含大多數主要方法。使用者應參閱此超類以獲取有關這些方法的更多資訊。
此類別從 Demucs 處理的音訊或直接從原始音訊波形中提取色度特徵。
MusicgenMelodyConfig
class transformers.MusicgenMelodyConfig
< 源 >( num_chroma = 12 chroma_length = 235 **kwargs )
引數
- num_chroma (
int
, 可選, 預設為 12) — 要使用的色度譜段數。 - chroma_length (
int
, 可選, 預設為 235) — 如果音訊用於模型條件化,則為最大色度持續時間。對應於訓練期間使用的最大持續時間。 - kwargs (可選) — 關鍵字引數字典。特別是:
- text_encoder (PretrainedConfig, 可選) — 定義文字編碼器配置的配置物件例項。
- audio_encoder (PretrainedConfig, 可選) — 定義音訊編碼器配置的配置物件例項。
- decoder (PretrainedConfig, 可選) — 定義解碼器配置的配置物件例項。
這是用於儲存 MusicgenMelodyModel 配置的配置類。它用於根據指定引數例項化 Musicgen Melody 模型,定義文字編碼器、音訊編碼器和 Musicgen Melody 解碼器配置。使用預設值例項化配置將產生與 Musicgen Melody facebook/musicgen-melody 架構類似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請閱讀 PretrainedConfig 的文件。
示例
>>> from transformers import (
... MusicgenMelodyConfig,
... MusicgenMelodyDecoderConfig,
... T5Config,
... EncodecConfig,
... MusicgenMelodyForConditionalGeneration,
... )
>>> # Initializing text encoder, audio encoder, and decoder model configurations
>>> text_encoder_config = T5Config()
>>> audio_encoder_config = EncodecConfig()
>>> decoder_config = MusicgenMelodyDecoderConfig()
>>> configuration = MusicgenMelodyConfig.from_sub_models_config(
... text_encoder_config, audio_encoder_config, decoder_config
... )
>>> # Initializing a MusicgenMelodyForConditionalGeneration (with random weights) from the facebook/musicgen-melody style configuration
>>> model = MusicgenMelodyForConditionalGeneration(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
>>> config_text_encoder = model.config.text_encoder
>>> config_audio_encoder = model.config.audio_encoder
>>> config_decoder = model.config.decoder
>>> # Saving the model, including its configuration
>>> model.save_pretrained("musicgen_melody-model")
>>> # loading model and config from pretrained folder
>>> musicgen_melody_config = MusicgenMelodyConfig.from_pretrained("musicgen_melody-model")
>>> model = MusicgenMelodyForConditionalGeneration.from_pretrained("musicgen_melody-model", config=musicgen_melody_config)
from_sub_models_config
< 源 >( text_encoder_config: PretrainedConfig audio_encoder_config: PretrainedConfig decoder_config: MusicgenMelodyDecoderConfig **kwargs ) → MusicgenMelodyConfig
從文字編碼器、音訊編碼器和解碼器配置例項化 MusicgenMelodyConfig (或派生類)。
MusicgenMelodyModel
class transformers.MusicgenMelodyModel
< 源 >( config: MusicgenMelodyDecoderConfig )
引數
- config (MusicgenMelodyDecoderConfig) — 模型的配置類,包含模型的所有引數。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。有關載入模型權重的資訊,請參閱 from_pretrained() 方法。
裸 Musicgen Melody 模型,輸出原始隱藏狀態,頂部沒有任何特定頭部。
此模型繼承自 PreTrainedModel。有關庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)的更多資訊,請參閱超類文件。
此模型也是 PyTorch torch.nn.Module 的子類。將其作為常規 PyTorch 模組使用,並參閱 PyTorch 文件以獲取所有與通用用法和行為相關的事項。
forward
< 源 >( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None encoder_hidden_states: typing.Optional[torch.FloatTensor] = None encoder_attention_mask: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.Tensor] = None past_key_values: typing.Optional[tuple[tuple[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 ) → transformers.modeling_outputs.BaseModelOutputWithPast 或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size * num_codebooks, sequence_length)
) — 詞彙表中輸入序列 token 的索引,對應於音訊程式碼序列。可以透過使用音訊編碼器模型(例如 EncodecModel)編碼音訊提示以預測音訊程式碼來獲取索引。有關詳細資訊,請參閱 EncodecModel.encode()。
在正向傳遞中,
input_ids
將自動從形狀(batch_size * num_codebooks, target_sequence_length)
轉換為(batch_size, num_codebooks, target_sequence_length)
。如果您從音訊編碼模型(例如 EncodecModel)獲取音訊程式碼,請確保幀數等於 1,並在將其作為input_ids
傳遞之前,將音訊程式碼從(frames, batch_size, num_codebooks, target_sequence_length)
重塑為(batch_size * num_codebooks, target_sequence_length)
。 - attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 避免對填充 token 索引執行注意力的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示 token 未被掩碼,
- 0 表示 token 已被掩碼。
- encoder_hidden_states (
torch.FloatTensor
,形狀為(batch_size, encoder_sequence_length, hidden_size)
,可選) — 表示文字編碼器輸出和處理後的音訊編碼器輸出串聯的隱藏狀態序列。用作條件訊號,因此將與投影的decoder_input_ids
串聯。 - encoder_attention_mask (
torch.LongTensor
,形狀為(batch_size, encoder_sequence_length)
,可選) — 避免對條件隱藏狀態執行注意力的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示 token 未被掩碼,
- 0 表示 token 已被掩碼。
- head_mask (
torch.Tensor
,形狀為(num_heads,)
或(num_layers, num_heads)
,可選) — 用於使自注意力模組的選定頭部無效的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示頭部未被掩碼,
- 0 表示頭部已被掩碼。
- past_key_values (
tuple[tuple[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 而不是普通元組。
返回
transformers.modeling_outputs.BaseModelOutputWithPast 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.BaseModelOutputWithPast 或一個 torch.FloatTensor
元組(如果傳遞 return_dict=False
或當 config.return_dict=False
時),包含取決於配置 (MusicgenMelodyConfig) 和輸入的各種元素。
-
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
MusicgenMelodyModel 的前向方法,覆蓋了 __call__
特殊方法。
雖然前向傳遞的配方需要在此函式中定義,但之後應該呼叫 Module
例項,而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
MusicgenMelodyForCausalLM
class transformers.MusicgenMelodyForCausalLM
< 源 >( config: MusicgenMelodyDecoderConfig )
引數
- config (MusicgenMelodyDecoderConfig) — 模型的配置類,包含模型的所有引數。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。有關載入模型權重的資訊,請參閱 from_pretrained() 方法。
帶語言建模頭的 Musicgen Melody 解碼器模型。
此模型繼承自 PreTrainedModel。有關庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)的更多資訊,請參閱超類文件。
此模型也是 PyTorch torch.nn.Module 的子類。將其作為常規 PyTorch 模組使用,並參閱 PyTorch 文件以獲取所有與通用用法和行為相關的事項。
forward
< 源 >( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None encoder_hidden_states: typing.Optional[torch.FloatTensor] = None encoder_attention_mask: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.Tensor] = None past_key_values: typing.Optional[tuple[tuple[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 labels: typing.Optional[torch.LongTensor] = None ) → transformers.models.musicgen_melody.modeling_musicgen_melody.MusicgenMelodyOutputWithPast
或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size * num_codebooks, sequence_length)
) — 詞彙表中輸入序列 token 的索引,對應於音訊程式碼序列。可以透過使用音訊編碼器模型(例如 EncodecModel)編碼音訊提示以預測音訊程式碼來獲取索引。有關詳細資訊,請參閱 EncodecModel.encode()。
在正向傳遞中,
input_ids
將自動從形狀(batch_size * num_codebooks, target_sequence_length)
轉換為(batch_size, num_codebooks, target_sequence_length)
。如果您從音訊編碼模型(例如 EncodecModel)獲取音訊程式碼,請確保幀數等於 1,並在將其作為input_ids
傳遞之前,將音訊程式碼從(frames, batch_size, num_codebooks, target_sequence_length)
重塑為(batch_size * num_codebooks, target_sequence_length)
。 - attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 避免對填充 token 索引執行注意力的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示 token 未被掩碼,
- 0 表示 token 已被掩碼。
- encoder_hidden_states (
torch.FloatTensor
,形狀為(batch_size, encoder_sequence_length, hidden_size)
,可選) — 表示文字編碼器輸出和處理後的音訊編碼器輸出串聯的隱藏狀態序列。用作條件訊號,因此將與投影的decoder_input_ids
串聯。 - encoder_attention_mask (
torch.LongTensor
,形狀為(batch_size, encoder_sequence_length)
,可選) — 避免對條件隱藏狀態執行注意力的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示 token 未被掩碼,
- 0 表示 token 已被掩碼。
- head_mask (
torch.Tensor
,形狀為(num_heads,)
或(num_layers, num_heads)
,可選) — 用於使自注意力模組的選定頭部無效的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示頭部未被掩碼,
- 0 表示頭部已被掩碼。
- past_key_values (
tuple[tuple[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 而不是普通元組。 - labels (
torch.LongTensor
,形狀為(batch_size, sequence_length, num_codebooks)
, 可選) — 語言模型的標籤。請注意,模型內部的標籤已偏移,即您可以設定labels = input_ids
。索引選擇範圍為[-100, 0, ..., config.vocab_size]
。所有設定為-100
的標籤將被忽略(遮蔽),損失僅針對[0, ..., config.vocab_size]
範圍內的標籤計算。
返回
transformers.models.musicgen_melody.modeling_musicgen_melody.MusicgenMelodyOutputWithPast
或 tuple(torch.FloatTensor)
一個 transformers.models.musicgen_melody.modeling_musicgen_melody.MusicgenMelodyOutputWithPast
或一個 torch.FloatTensor
的元組(如果傳入 return_dict=False
或 config.return_dict=False
),包含根據配置(MusicgenMelodyConfig)和輸入的不同元素。
-
loss (
torch.FloatTensor
形狀為(1,)
,可選,當提供labels
時返回) — 語言建模損失(用於下一個 token 預測)。 -
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_layers
的tuple(torch.FloatTensor)
元組,每個元組包含 2 個形狀為(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 後的注意力權重,用於計算自注意力頭中的加權平均值。
-
encoder_hidden_states (
torch.FloatTensor
,形狀為(batch_size, encoder_sequence_length, hidden_size)
, 可選) — 表示投影文字編碼器輸出和投影音訊編碼器輸出的連線的條件隱藏狀態序列。用作條件訊號。
MusicgenMelodyForCausalLM 的 forward 方法,覆蓋了 __call__
特殊方法。
雖然前向傳遞的配方需要在此函式中定義,但之後應該呼叫 Module
例項,而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
MusicgenMelodyForConditionalGeneration
class transformers.MusicgenMelodyForConditionalGeneration
< source >( config: MusicgenMelodyConfig = None text_encoder: typing.Optional[transformers.modeling_utils.PreTrainedModel] = None audio_encoder: typing.Optional[transformers.modeling_utils.PreTrainedModel] = None decoder: typing.Optional[transformers.models.musicgen_melody.modeling_musicgen_melody.MusicgenMelodyForCausalLM] = None )
引數
- config (MusicgenMelodyConfig) — 模型的配置類,包含模型的所有引數。使用配置檔案初始化不會載入與模型關聯的權重,僅載入配置。請檢視 from_pretrained() 方法來載入模型權重。
- text_encoder (
PreTrainedModel
, 可選) — 將文字編碼為用於條件生成的隱藏狀態的文字編碼器模型。 - audio_encoder (
PreTrainedModel
, 可選) — 將音訊編碼為用於條件生成的隱藏狀態的音訊編碼器模型。 - decoder (
MusicgenForCausalLM
, 可選) — 根據條件訊號生成音訊標記的解碼器模型。
Musicgen Melody 模型,用於基於其他模態(例如,影像-文字-到-文字生成)進行條件化的標記生成。
此模型繼承自 PreTrainedModel。有關庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)的更多資訊,請參閱超類文件。
此模型也是 PyTorch torch.nn.Module 的子類。將其作為常規 PyTorch 模組使用,並參閱 PyTorch 文件以獲取所有與通用用法和行為相關的事項。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.BoolTensor] = None input_features: typing.Optional[torch.FloatTensor] = None decoder_input_ids: typing.Optional[torch.LongTensor] = None decoder_attention_mask: typing.Optional[torch.BoolTensor] = None past_key_values: typing.Optional[tuple[tuple[torch.FloatTensor]]] = None encoder_hidden_states: typing.Optional[torch.FloatTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None decoder_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 **kwargs ) → transformers.models.musicgen_melody.modeling_musicgen_melody.MusicgenMelodyOutputWithPast
或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
, 可選) — 詞彙表中輸入序列標記的索引。預設情況下會忽略填充。索引可以使用 AutoTokenizer 獲取。有關詳細資訊,請參見 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.BoolTensor
,形狀為(batch_size, sequence_length)
, 可選) — 遮罩,用於避免對填充標記索引執行注意力操作。遮罩值在[0, 1]
中選擇:- 1 表示未被遮罩的標記,
- 0 表示被遮罩的標記。
- input_features (
torch.FloatTensor
,形狀為(batch_size, audio_sequence_length, num_chroma)
) — 輸入音訊特徵。這應該由 MusicgenMelodyFeatureExtractor 類返回,您也可以從 AutoFeatureExtractor 中檢索。有關詳細資訊,請參見MusicgenMelodyFeatureExtractor.__call__()
。 - decoder_input_ids (
torch.LongTensor
,形狀為(batch_size * num_codebooks, target_sequence_length)
, 可選) — 解碼器輸入序列標記的詞彙表索引,對應於音訊程式碼序列。索引可以透過使用音訊編碼器模型(例如 EncodecModel)對音訊提示進行編碼來預測音訊程式碼來獲取。有關詳細資訊,請參見 EncodecModel.encode()。
decoder_input_ids
將自動從形狀(batch_size * num_codebooks, target_sequence_length)
轉換為(batch_size, num_codebooks, target_sequence_length)
在前向傳播中。如果您從音訊編碼模型(例如 EncodecModel)獲取音訊程式碼,請確保幀數等於 1,並且在將它們作為decoder_input_ids
傳遞之前,將音訊程式碼從(frames, batch_size, num_codebooks, target_sequence_length)
重塑為(batch_size * num_codebooks, target_sequence_length)
。 - decoder_attention_mask (
torch.LongTensor
,形狀為(batch_size, target_sequence_length)
, 可選) — 預設行為:生成一個在decoder_input_ids
中忽略填充標記的張量。預設情況下也會使用因果遮罩。 - past_key_values (
tuple[tuple[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
,使用者可以選擇僅輸入最後一個input_ids
(那些沒有將過去的鍵值狀態提供給此模型的)形狀為(batch_size, 1)
,而不是所有input_ids
形狀為(batch_size, sequence_length)
。 - encoder_hidden_states (
torch.FloatTensor
,形狀為(batch_size, encoder_sequence_length, hidden_size)
, 可選) — 表示投影文字編碼器輸出和投影音訊編碼器輸出的連線的條件隱藏狀態序列。用作條件訊號,因此將與投影的decoder_input_ids
連線。 - inputs_embeds (
torch.FloatTensor
,形狀為(batch_size, sequence_length, hidden_size)
, 可選) — 或者,您可以選擇直接傳遞嵌入表示,而不是傳遞input_ids
。如果您希望對input_ids
索引如何轉換為相關向量有比模型內部嵌入查詢矩陣更多的控制,這將非常有用。 - decoder_inputs_embeds (
torch.FloatTensor
,形狀為(batch_size, target_sequence_length, hidden_size)
, 可選) — 或者,您可以選擇直接傳遞嵌入表示,而不是傳遞decoder_input_ids
。如果使用past_key_values
,則可以選擇僅輸入最後一個decoder_inputs_embeds
(參見past_key_values
)。如果您希望對decoder_input_ids
索引如何轉換為相關向量有比模型內部嵌入查詢矩陣更多的控制,這將非常有用。如果
decoder_input_ids
和decoder_inputs_embeds
都未設定,則decoder_inputs_embeds
取inputs_embeds
的值。 - labels (
torch.LongTensor
,形狀為(batch_size, sequence_length, num_codebooks)
, 可選) — 語言模型的標籤。請注意,模型內部的標籤已偏移,即您可以設定labels = input_ids
。索引選擇範圍為[-100, 0, ..., config.vocab_size]
。所有設定為-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 而不是普通元組。
返回
transformers.models.musicgen_melody.modeling_musicgen_melody.MusicgenMelodyOutputWithPast
或 tuple(torch.FloatTensor)
一個 transformers.models.musicgen_melody.modeling_musicgen_melody.MusicgenMelodyOutputWithPast
或一個 torch.FloatTensor
的元組(如果傳入 return_dict=False
或 config.return_dict=False
),包含根據配置(MusicgenMelodyConfig)和輸入的不同元素。
-
loss (
torch.FloatTensor
形狀為(1,)
,可選,當提供labels
時返回) — 語言建模損失(用於下一個 token 預測)。 -
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_layers
的tuple(torch.FloatTensor)
元組,每個元組包含 2 個形狀為(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 後的注意力權重,用於計算自注意力頭中的加權平均值。
-
encoder_hidden_states (
torch.FloatTensor
,形狀為(batch_size, encoder_sequence_length, hidden_size)
, 可選) — 表示投影文字編碼器輸出和投影音訊編碼器輸出的連線的條件隱藏狀態序列。用作條件訊號。
MusicgenMelodyForConditionalGeneration 的 forward 方法,覆蓋了 __call__
特殊方法。
雖然前向傳遞的配方需要在此函式中定義,但之後應該呼叫 Module
例項,而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
示例
>>> from transformers import AutoProcessor, MusicgenMelodyForConditionalGeneration
>>> import torch
>>> processor = AutoProcessor.from_pretrained("facebook/musicgen-melody")
>>> model = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody")
>>> inputs = processor(
... text=["80s pop track with bassy drums and synth", "90s rock song with loud guitars and heavy drums"],
... padding=True,
... return_tensors="pt",
... )
>>> pad_token_id = model.generation_config.pad_token_id
>>> decoder_input_ids = (
... torch.ones((inputs.input_ids.shape[0] * model.decoder.num_codebooks, 1), dtype=torch.long)
... * pad_token_id
... )
>>> logits = model(**inputs, decoder_input_ids=decoder_input_ids).logits
>>> logits.shape # (bsz * num_codebooks, encoder_len + tgt_len, vocab_size)
torch.Size([8, 249, 2048])