Diffusers documentation
LongCat-AudioDiT
LongCat-AudioDiT
LongCat-AudioDiT est un modèle de diffusion texte-vers-audio de Meituan LongCat. L'intégration diffusers expose une interface standard DiffusionPipeline pour la génération d'audio conditionnée par le texte.
Ce pipeline a été adapté de l'implémentation de référence LongCat-AudioDiT : https://github.com/meituan-longcat/LongCat-AudioDiT
Ce pipeline prend en charge le chargement depuis un répertoire local ou un dépôt du Hugging Face Hub au format diffusers (contenant les sous-dossiers text_encoder/, transformer/, vae/, tokenizer/ et scheduler/).
Utilisation
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)Astuces
audio_duration_sest la méthode la plus directe pour contrôler la durée de la sortie.- Utilisez
generator=torch.Generator("cuda").manual_seed(42)pour rendre la génération reproductible. - La forme de la sortie est
(batch, channels, samples)- utilisez.audios[0, 0]pour obtenir un échantillon audio unique. - Le pipeline sort un audio mono (1 canal). Si vous avez besoin du stéréo, vous pouvez dupliquer le 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
Paramètres
- prompt (
stroulist[str]) — Prompt ou prompts qui guident la génération audio. - negative_prompt (
stroulist[str], facultatif) — Prompt(s) négatif(s) pour le guidage sans classifieur. - audio_duration_s (
float, facultatif) — Durée cible de l’audio en secondes. Ignoré lorsquelatentsest fourni. - latents (
torch.Tensor, facultatif) — Latents bruités pré-générés de forme(batch_size, duration, latent_dim). - num_inference_steps (
int, par défaut 16) — Nombre d'étapes de débruitage. - guidance_scale (
float, par défaut 4.0) — Échelle de guidage pour le guidage sans classifieur. - generator (
torch.Generatoroulist[torch.Generator], facultatif) — Générateur(s) aléatoire(s). - output_type (
str, par défaut"np") — Format de sortie :"np","pt"ou"latent". - return_dict (
bool, par défautTrue) — Indique s'il faut retournerAudioPipelineOutput. - callback_on_step_end (
Callable, facultatif) — Une fonction appelée à la fin de chaque étape de débruitage, recevant le pipeline, l'indice de l'étape, le timestep et les entrées tensorielles spécifiées parcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list, par défaut["latents"]) — Entrées tensorielles passées àcallback_on_step_end.
Retourne
AudioPipelineOutput ou tuple
AudioPipelineOutput si return_dict est True,
sinon un tuple. En cas de retour d'un tuple, le premier élément est la forme d'onde audio générée.
Fonction appelée lors de l'appel du pipeline pour la génération.
Exemples :
>>> 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 )
Paramètres
- pretrained_model_name_or_path (
strouos.PathLike, facultatif) — Peut être l'un des éléments suivants :- Une chaîne de caractères, l'identifiant du dépôt (par exemple
CompVis/ldm-text2im-large-256) d'un pipeline pré-entraîné hébergé sur le Hub. - Un chemin vers un dossier (par exemple
./my_pipeline_directory/) contenant les poids du pipeline enregistrés à l'aide de save_pretrained().
- Une chaîne de caractères, l'identifiant du dépôt (par exemple
- dtype (
torch.dtypeoudict[str, Union[str, torch.dtype]], facultatif) — Remplace letorch.dtypepar défaut et charge le modèle avec un autre dtype. Pour charger des sous-modèles avec des dtypes différents, passez undict(par exemple{'transformer': torch.bfloat16, 'vae': torch.float16}). Définissez le dtype par défaut pour les composants non spécifiés avecdefault(par exemple{'transformer': torch.bfloat16, 'default': torch.float16}). Si un composant n'est pas spécifié et qu'aucun défaut n'est défini,torch.float32est utilisé. - custom_pipeline (
str, facultatif) —> 🧪 Il s'agit d'une fonctionnalité expérimentale qui peut évoluer à l'avenir.
Peut être :
- Une chaîne de caractères, l'identifiant du dépôt (par exemple
hf-internal-testing/diffusers-dummy-pipeline) d'un pipeline personnalisé hébergé sur le Hub. Le dépôt doit contenir un fichier nommé pipeline.py qui définit le pipeline personnalisé. - Une chaîne de caractères, le nom de fichier d’un pipeline communautaire hébergé sur GitHub sous
Community. Les noms de fichiers valides doivent correspondre au nom du fichier et non au script du pipeline (
clip_guided_stable_diffusionplutôt queclip_guided_stable_diffusion.py). Les pipelines communautaires sont toujours chargés depuis la branche main actuelle de GitHub. - Un chemin vers un répertoire (
./my_pipeline_directory/) contenant un pipeline personnalisé. Le répertoire doit contenir un fichier nommépipeline.pyqui définit le pipeline personnalisé.
Pour plus d'informations sur la manière de charger et de créer des pipelines personnalisés, veuillez consulter Chargement et ajout de pipelines personnalisés
- Une chaîne de caractères, l'identifiant du dépôt (par exemple
- force_download (
bool, facultatif, par défautFalse) — Indique s'il faut forcer le (re)téléchargement des poids du modèle et des fichiers de configuration, en ignorant les versions mises en cache si elles existent. - cache_dir (
Union[str, os.PathLike], facultatif) — Chemin vers un répertoire où la configuration d'un modèle pré-entraîné téléchargé est mise en cache si le cache standard n'est pas utilisé. - proxies (
Dict[str, str], facultatif) — Un dictionnaire de serveurs proxy à utiliser par protocole ou point de terminaison, par exemple,{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}. Les proxys sont utilisés pour chaque requête. - output_loading_info(
bool, facultatif, par défautFalse) — Indique s'il faut également retourner un dictionnaire contenant les clés manquantes, les clés inattendues et les messages d'erreur. - local_files_only (
bool, facultatif, par défautFalse) — Indique s'il faut charger uniquement les poids et les fichiers de configuration du modèle en local. Si défini surTrue, le modèle ne sera pas téléchargé depuis le Hub. - token (
strou bool, facultatif) — Le jeton à utiliser comme autorisation bearer HTTP pour les fichiers distants. SiTrue, le jeton généré pardiffusers-cli login(stocké dans~/.huggingface) est utilisé. - revision (
str, facultatif, par défaut"main") — La version spécifique du modèle à utiliser. Il peut s’agir d’un nom de branche, d’un nom de tag, d’un identifiant de commit ou de tout identifiant autorisé par Git. - custom_revision (
str, facultatif) — La version spécifique du modèle à utiliser. Il peut s’agir d’un nom de branche, d’un nom de tag ou d’un identifiant de commit, de la même manière querevisionlors du chargement d’un pipeline personnalisé depuis le Hub. Par défaut, la dernière version stable 🤗 Diffusers est utilisée. - mirror (
str, facultatif) — Source miroir pour résoudre les problèmes d’accessibilité lors du téléchargement d’un modèle en Chine. Nous ne garantissons ni la réactivité ni la sécurité de la source ; veuillez consulter le site miroir pour plus d’informations. - device_map (
str, facultatif) — Stratégie qui détermine comment les différents composants d'un pipeline doivent être répartis sur les dispositifs disponibles. Actuellement, seul ledevice_map« balanced » est pris en charge. Consultez ce lien pour en savoir plus. - max_memory (
Dict, facultatif) — Un dictionnaire identifiant les appareils pour la mémoire maximale. Par défaut, la valeur est la mémoire maximale disponible pour chaque GPU et la RAM CPU disponible si non définie. - offload_folder (
strouos.PathLike, facultatif) — Le chemin vers lequel décharger les poids si device_map contient la valeur"disk". - offload_state_dict (
bool, facultatif) — SiTrue, décharge temporairement le dictionnaire d’état CPU sur le disque dur pour éviter d’épuiser la RAM CPU si le poids du dictionnaire d’état CPU + le plus grand fragment du point de contrôle ne tient pas. La valeur par défaut estTruelorsqu’une décharge sur disque est présente. - low_cpu_mem_usage (
bool, facultatif, par défautTruesi la version de torch est >= 1.9.0, sinonFalse) — Accélère le chargement du modèle en ne chargeant que les poids pré-entraînés et sans initialiser les poids. Cela permet également de ne pas utiliser plus de 1 fois la taille du modèle en mémoire CPU (y compris la mémoire de pointe) lors du chargement du modèle. Uniquement pris en charge pour PyTorch >= 1.9.0. Si vous utilisez une version plus ancienne de PyTorch, définir cet argument surTruedéclenchera une erreur. - use_safetensors (
bool, facultatif, valeur par défautNone) — Si défini surNone, les poids safetensors sont téléchargés s’ils sont disponibles et si la bibliothèque safetensors est installée. Si défini surTrue, le modèle est chargé de manière forcée à partir des poids safetensors. Si défini surFalse, les poids safetensors ne sont pas chargés. - use_onnx (
bool, facultatif, valeur par défautNone) — Si défini surTrue, les poids ONNX seront toujours téléchargés s’ils sont présents. Si défini surFalse, les poids ONNX ne seront jamais téléchargés. Par défaut,use_onnxprend la valeur de l’attribut de classe_is_onnx, qui estFalsepour les pipelines non-ONNX etTruepour les pipelines ONNX. Les poids ONNX incluent à la fois les fichiers se terminant par.onnxet.pb. - kwargs (dictionnaire restant des arguments par mot-clé, facultatif) —
Peut être utilisé pour écraser les variables de chargement et de sauvegarde (les composants du pipeline de la classe de pipeline spécifique). Les composants écrasés sont transmis directement à la méthode
__init__des pipelines. Voir l’exemple ci-dessous pour plus d’informations. - variant (
str, facultatif) — Charge les poids depuis un nom de fichier de variante spécifié, tel que"fp16"ou"ema". - disable_mmap (‘bool’, facultatif, valeur par défaut ‘False’) — Indique s'il faut désactiver mmap lors du chargement d'un modèle Safetensors. Cette option peut offrir de meilleures performances lorsque le modèle se trouve sur un montage réseau ou un disque dur, qui peuvent ne pas gérer correctement les accès aléatoires (seek) de mmap.
Instanciez un pipeline de diffusion PyTorch à partir de poids de pipeline pré-entraînés.
Le pipeline est défini en mode évaluation (model.eval()) par défaut.
Si vous obtenez le message d’erreur ci-dessous, vous devez affiner les poids pour votre tâche en aval :
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.> Pour utiliser des modèles privés ou restreints, connectez-vous avec
hf > auth login.
Exemples :
>>> 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