Diffusers documentation
LongCat-AudioDiT
LongCat-AudioDiT
LongCat-AudioDiT é um modelo de difusão de texto para áudio da Meituan LongCat. A integração com diffusers expõe uma interface padrão DiffusionPipeline para geração de áudio condicionada por texto.
Este pipeline foi adaptado da implementação de referência do LongCat-AudioDiT: https://github.com/meituan-longcat/LongCat-AudioDiT
Este pipeline suporta o carregamento a partir de um diretório local ou de um repositório do Hugging Face Hub no formato diffusers (contendo as subpastas text_encoder/, transformer/, vae/, tokenizer/ e scheduler/).
Uso
import soundfile as sf
import torch
from diffusers import LongCatAudioDiTPipeline
pipeline = LongCatAudioDiTPipeline.from_pretrained(
"ruixiangma/LongCat-AudioDiT-1B-Diffusers",
dtype=torch.float16,
)
pipeline = pipeline.to("cuda") # or "mps", "xpu", "cpu"
prompt = "A calm ocean wave ambience with soft wind in the background."
audio = pipeline(
prompt,
audio_duration_s=5.0,
num_inference_steps=16,
guidance_scale=4.0,
generator=torch.Generator("cuda").manual_seed(42),
).audios[0, 0]
sf.write("longcat.wav", audio, pipeline.sample_rate)Dicas
audio_duration_sé a maneira mais direta de controlar a duração da saída.- Use
generator=torch.Generator("cuda").manual_seed(42)para tornar a geração reproduzível. - A forma de saída é
(batch, channels, samples)- use.audios[0, 0]para obter uma única amostra de áudio. - O pipeline gera áudio mono (1 canal). Se você precisar de estéreo, pode duplicar o canal:
audio.unsqueeze(0).repeat(1, 2, 1).
LongCatAudioDiTPipeline
classe diffusers.LongCatAudioDiTPipeline
< source >( vae: LongCatAudioDiTVaetext_encoder: UMT5EncoderModeltokenizer: PreTrainedTokenizerBasetransformer: LongCatAudioDiTTransformerscheduler: diffusers.schedulers.scheduling_flow_match_euler_discrete.FlowMatchEulerDiscreteScheduler | None = None )
__call__
< source >( prompt: str | list[str]negative_prompt: str | list[str] | None = Noneaudio_duration_s: float | None = Nonelatents: typing.Optional[torch.Tensor] = Nonenum_inference_steps: int = 16guidance_scale: float = 4.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneoutput_type: str = 'np'return_dict: bool = Truecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents'] ) → AudioPipelineOutput or tuple
Parâmetros
- prompt (
stroulist[str]) — Prompt ou prompts que orientam a geração de áudio. - negative_prompt (
stroulist[str], opcional) — Prompt(s) negativo(s) para orientação sem classificador. - audio_duration_s (
float, opcional) — Duração alvo do áudio em segundos. Ignorado quandolatentsé fornecido. - latents (
torch.Tensor, opcional) — Latentes ruidosos pré-gerados com forma(batch_size, duration, latent_dim). - num_inference_steps (
int, padrão 16) — Número de etapas de desruido. - guidance_scale (
float, padrão 4.0) — Escala de orientação para orientação sem classificador. - generator (
torch.Generatoroulist[torch.Generator], opcional) — Gerador(es) aleatório(s). - output_type (
str, padrão"np") — Formato de saída:"np","pt"ou"latent". - return_dict (
bool, padrãoTrue) — Se deve retornarAudioPipelineOutput. - callback_on_step_end (
Callable, opcional) — Uma função chamada no final de cada etapa de desruidamento com o pipeline, índice da etapa, timestep e entradas de tensor especificadas porcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list, padrão["latents"]) — Entradas de tensor passadas paracallback_on_step_end.
Retorna
AudioPipelineOutput ou tuple
AudioPipelineOutput se return_dict for True,
caso contrário, uma tuple. Ao retornar uma tupla, o primeiro elemento é a forma de onda de áudio gerada.
Função invocada ao chamar o pipeline para geração.
Exemplos:
>>> import soundfile as sf
>>> import torch
>>> from diffusers import LongCatAudioDiTPipeline
>>> pipe = LongCatAudioDiTPipeline.from_pretrained("ruixiangma/LongCat-AudioDiT-1B-Diffusers")
>>> pipe.to("cuda")
>>> prompt = "A calm ocean wave ambience with soft wind in the background."
>>> audio = pipe(
... prompt,
... audio_duration_s=5.0,
... num_inference_steps=20,
... guidance_scale=4.0,
... generator=torch.Generator("cuda").manual_seed(42),
... ).audios[0, 0]
>>> sf.write("output.wav", audio, pipe.sample_rate)from_pretrained
< source >( pretrained_model_name_or_path: str | os.PathLike**kwargs )
Parâmetros
- pretrained_model_name_or_path (
strouos.PathLike, opcional) — Pode ser:- Uma string, o repo id (por exemplo,
CompVis/ldm-text2im-large-256) de um pipeline pré-treinado hospedado no Hub. - Um caminho para um diretório (por exemplo,
./my_pipeline_directory/) contendo pesos de pipeline salvos usando save_pretrained().
- Uma string, o repo id (por exemplo,
- dtype (
torch.dtypeoudict[str, Union[str, torch.dtype]], opcional) — Substitui otorch.dtypepadrão e carrega o modelo com outro dtype. Para carregar submodelos com diferentes dtypes, passe umdict(por exemplo,{'transformer': torch.bfloat16, 'vae': torch.float16}). Defina o dtype padrão para componentes não especificados comdefault(por exemplo,{'transformer': torch.bfloat16, 'default': torch.float16}). Se um componente não for especificado e nenhum padrão for definido,torch.float32será usado. - custom_pipeline (
str, opcional) —> 🧪 Este é um recurso experimental e pode mudar no futuro.
Pode ser:
- Uma string, o repo id (por exemplo
hf-internal-testing/diffusers-dummy-pipeline) de um pipeline personalizado hospedado no Hub. O repositório deve conter um arquivo chamado pipeline.py que define o pipeline personalizado. - Uma string, o nome do arquivo de um pipeline da comunidade hospedado no GitHub sob
Community. Os nomes de
arquivo válidos devem corresponder ao nome do arquivo e não ao script do pipeline (
clip_guided_stable_diffusionem vez declip_guided_stable_diffusion.py). Os pipelines da comunidade são sempre carregados da branch main atual do GitHub. - Um caminho para um diretório (
./my_pipeline_directory/) contendo um pipeline personalizado. O diretório deve conter um arquivo chamadopipeline.pyque define o pipeline personalizado.
Para mais informações sobre como carregar e criar pipelines personalizados, consulte Carregamento e Adição de Pipelines Personalizados
- Uma string, o repo id (por exemplo
- force_download (
bool, opcional, padrãoFalse) — Se deve forçar o (re-)download dos pesos do modelo e dos arquivos de configuração, sobrescrevendo as versões em cache, caso existam. - cache_dir (
Union[str, os.PathLike], opcional) — Caminho para um diretório onde a configuração de um modelo pré-treinado baixado é armazenada em cache, caso o cache padrão não seja utilizado. - proxies (
Dict[str, str], opcional) — Um dicionário de servidores proxy a serem usados por protocolo ou endpoint, por exemplo,{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}. Os proxies são usados em cada solicitação. - output_loading_info(
bool, opcional, padrãoFalse) — Indica se deve ou não retornar também um dicionário contendo chaves ausentes, chaves inesperadas e mensagens de erro. - local_files_only (
bool, opcional, padrãoFalse) — Se deve carregar apenas os pesos e arquivos de configuração do modelo localmente. Se definido comoTrue, o modelo não será baixado do Hub. - token (
strou bool, opcional) — O token a ser usado como autorização de bearer HTTP para arquivos remotos. SeTrue, o token gerado pordiffusers-cli login(armazenado em~/.huggingface) é utilizado. - revision (
str, opcional, padrão"main") — A versão específica do modelo a ser usada. Pode ser o nome de um branch, o nome de uma tag, um id de commit ou qualquer identificador permitido pelo Git. - custom_revision (
str, opcional) — A versão específica do modelo a ser usada. Pode ser um nome de branch, um nome de tag ou um id de commit, semelhante arevisionao carregar um pipeline personalizado do Hub. O padrão é a versão estável mais recente do 🤗 Diffusers. - mirror (
str, opcional) — Espelho de origem para resolver problemas de acessibilidade se você estiver baixando um modelo na China. Não garantimos a atualidade ou a segurança da origem, e você deve consultar o site do espelho para obter mais informações. - device_map (
str, opcional) — Estratégia que determina como os diferentes componentes de um pipeline devem ser alocados nos dispositivos disponíveis. Atualmente, apenas odevice_map“balanced” é suportado. Consulte este para saber mais. - max_memory (
Dict, opcional) — Um dicionário com o identificador do dispositivo para a memória máxima. Se não for definido, o padrão será a memória máxima disponível para cada GPU e a RAM disponível na CPU. - offload_folder (
strouos.PathLike, opcional) — O caminho para descarregar os pesos se device_map contiver o valor"disk". - offload_state_dict (
bool, opcional) — SeTrue, descarrega temporariamente o state dict da CPU para o disco rígido para evitar a falta de RAM da CPU caso o peso do state dict da CPU + o maior shard do checkpoint não caiba. O padrão éTruequando há algum offload de disco. - low_cpu_mem_usage (
bool, opcional, padrãoTruese a versão do torch >= 1.9.0, caso contrárioFalse) — Acelera o carregamento do modelo carregando apenas os pesos pré-treinados e não inicializando os pesos. Isso também tenta não usar mais do que 1x o tamanho do modelo na memória de CPU (incluindo a memória de pico) durante o carregamento do modelo. Suportado apenas para PyTorch >= 1.9.0. Se você estiver usando uma versão mais antiga do PyTorch, definir este argumento comoTruecausará um erro. - use_safetensors (
bool, opcional, padrãoNone) — Se definido comoNone, os pesos em safetensors são baixados se estiverem disponíveis e se a biblioteca safetensors estiver instalada. Se definido comoTrue, o modelo é carregado forçadamente a partir dos pesos em safetensors. Se definido comoFalse, os pesos em safetensors não são carregados. - use_onnx (
bool, opcional, padrãoNone) — Se definido comoTrue, os pesos ONNX sempre serão baixados, se presentes. Se definido comoFalse, os pesos ONNX nunca serão baixados. Por padrão,use_onnxassume o valor do atributo de classe_is_onnx, que éFalsepara pipelines não-ONNX eTruepara pipelines ONNX. Os pesos ONNX incluem tanto arquivos que terminam em.onnxquanto.pb. - kwargs (dicionário restante de argumentos de palavra-chave, opcional) —
Pode ser usado para sobrescrever variáveis de carregamento e salvamento (os componentes do pipeline da classe de pipeline específica). Os componentes sobrescritos são passados diretamente para o método
__init__dos pipelines. Veja o exemplo abaixo para mais informações. - variant (
str, opcional) — Carrega os pesos de um nome de arquivo de variante especificado, como"fp16"ou"ema". - disable_mmap (‘bool’, opcional, padrão ‘False’) — Se deve desabilitar o mmap ao carregar um modelo Safetensors. Essa opção pode ter um desempenho melhor quando o modelo está em uma montagem de rede ou em um disco rígido, que podem não lidar bem com a natureza de buscas aleatórias (seek) do mmap.
Instanciar um pipeline de difusão do PyTorch a partir de pesos de pipeline pré-treinados.
O pipeline é definido no modo de avaliação (model.eval()) por padrão.
Se você receber a mensagem de erro abaixo, é necessário ajustar os pesos para sua tarefa de destino:
Some weights of UNet2DConditionModel were not initialized from the model checkpoint at stable-diffusion-v1-5/stable-diffusion-v1-5 and are newly initialized because the shapes did not match:
- conv_in.weight: found shape torch.Size([320, 4, 3, 3]) in the checkpoint and torch.Size([320, 9, 3, 3]) in the model instantiated
You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.> Para usar modelos privados ou com acesso restrito, faça login com
hf > auth login.
Exemplos:
>>> from diffusers import DiffusionPipeline
>>> # Download pipeline from huggingface.co and cache.
>>> pipeline = DiffusionPipeline.from_pretrained("CompVis/ldm-text2im-large-256")
>>> # Download pipeline that requires an authorization token
>>> # For more information on access tokens, please refer to this section
>>> # of the documentation](https://huggingface.co/docs/hub/security-tokens)
>>> pipeline = DiffusionPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5")
>>> # Use a different scheduler
>>> from diffusers import LMSDiscreteScheduler
>>> scheduler = LMSDiscreteScheduler.from_config(pipeline.scheduler.config)
>>> pipeline.scheduler = scheduler