Diffusers documentation
LongCat-AudioDiT
LongCat-AudioDiT
LongCat-AudioDiT — это диффузионная модель для генерации аудио по тексту от Meituan LongCat. Интеграция с diffusers предоставляет стандартный интерфейс DiffusionPipeline для генерации аудио по текстовому условию.
Этот конвейер адаптирован из эталонной реализации LongCat-AudioDiT: https://github.com/meituan-longcat/LongCat-AudioDiT
Этот конвейер поддерживает загрузку из локального каталога или репозитория Hugging Face Hub в формате diffusers (содержащего подкаталоги text_encoder/, transformer/, vae/, tokenizer/ и scheduler/).
Использование
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)Советы
audio_duration_s— самый прямой способ управлять длительностью вывода.- Используйте
generator=torch.Generator("cuda").manual_seed(42), чтобы сделать генерацию воспроизводимой. - Форма выходных данных —
(batch, channels, samples)— используйте.audios[0, 0], чтобы получить один аудиосэмпл. - Пайплайн выводит моноаудио (1 канал). Если вам нужен стерео, вы можете дублировать канал:
audio.unsqueeze(0).repeat(1, 2, 1).
LongCatAudioDiTPipeline
класс 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
Параметры
- prompt (
strилиlist[str]) — Промпт или список промптов, направляющих генерацию аудио. - negative_prompt (
strилиlist[str], необязательный) — Отрицательный промпт(ы) для classifier-free guidance. - audio_duration_s (
float, необязательный) — Целевая длительность аудио в секундах. Игнорируется, если предоставленоlatents. - latents (
torch.Tensor, необязательный) — Предварительно сгенерированные зашумленные латенты формы(batch_size, duration, latent_dim). - num_inference_steps (
int, по умолчанию 16) — Количество шагов денойзинга. - guidance_scale (
float, по умолчанию 4.0) — Масштаб руководства для classifier-free guidance. - generator (
torch.Generatorилиlist[torch.Generator], необязательный) — Генератор(ы) случайных чисел. - output_type (
str, по умолчанию"np") — Формат вывода:"np","pt"или"latent". - return_dict (
bool, по умолчаниюTrue) — возвращать лиAudioPipelineOutput. - callback_on_step_end (
Callable, необязательный) — Функция, вызываемая в конце каждого шага денойзинга с переданными в неё пайплайном, индексом шага, временным шагом и тензорными входами, указанными вcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list, по умолчанию["latents"]) — тензорные входные данные, передаваемые вcallback_on_step_end.
Возвращает
AudioPipelineOutput или tuple
AudioPipelineOutput, если return_dict равно True,
иначе — tuple. При возврате кортежа первым элементом является сгенерированная аудиоволна.
Функция, вызываемая при обращении к конвейеру для генерации.
Примеры:
>>> 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 )
Параметры
- pretrained_model_name_or_path (
strилиos.PathLike, необязательный) — Может быть:- Строка, repo id (например,
CompVis/ldm-text2im-large-256) предобученного пайплайна, размещенного на Hub. - Путь к каталогу (например,
./my_pipeline_directory/), содержащему веса пайплайна, сохранённые с помощью save_pretrained().
- Строка, repo id (например,
- dtype (
torch.dtypeилиdict[str, Union[str, torch.dtype]], необязательный) — Переопределяет стандартныйtorch.dtypeи загружает модель с другим типом данных. Чтобы загрузить подмодели с разными типами данных, передайтеdict(например,{'transformer': torch.bfloat16, 'vae': torch.float16}). Установите стандартный тип данных для компонентов, не указанных явно, с помощьюdefault(например,{'transformer': torch.bfloat16, 'default': torch.float16}). Если компонент не указан и стандартный тип данных не задан, используетсяtorch.float32. - custom_pipeline (
str, необязательный) —> 🧪 Это экспериментальная функция, которая может измениться в будущем.
Может быть одним из следующих:
- Строка, repo id (например,
hf-internal-testing/diffusers-dummy-pipeline) пользовательского пайплайна, размещенного на Hub. Репозиторий должен содержать файл pipeline.py, в котором определяется пользовательский пайплайн. - Строка, имя файла сообщества пайплайна, размещённого на GitHub в разделе
Community. Допустимые имена
файлов должны соответствовать имени файла, а не имени скрипта пайплайна (
clip_guided_stable_diffusionвместоclip_guided_stable_diffusion.py). Пайплайны сообщества всегда загружаются из текущей ветки main на GitHub. - Путь к каталогу (
./my_pipeline_directory/), содержащему пользовательский конвейер. В каталоге должен присутствовать файлpipeline.py, в котором определяется пользовательский конвейер.
Для получения дополнительной информации о загрузке и создании пользовательских конвейеров ознакомьтесь с разделом Загрузка и добавление пользовательских конвейеров
- Строка, repo id (например,
- force_download (
bool, необязательный, по умолчаниюFalse) — Следует ли принудительно (пере)скачивать веса модели и файлы конфигурации, игнорируя кэшированные версии, если они существуют. - cache_dir (
Union[str, os.PathLike], необязательный) — Путь к каталогу, в котором кэшируется загруженная конфигурация предобученной модели, если стандартный кэш не используется. - proxies (
Dict[str, str], необязательный) — Словарь прокси-серверов, используемых по протоколу или конечной точке, например,{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}. Прокси используются при каждом запросе. - output_loading_info(
bool, optional, по умолчаниюFalse) — Определяет, следует ли также возвращать словарь, содержащий отсутствующие ключи, неожиданные ключи и сообщения об ошибках. - local_files_only (
bool, необязательный, по умолчаниюFalse) — Определяет, следует ли загружать только локальные веса модели и файлы конфигурации. Если установлено значениеTrue, модель не будет скачана с Hub. - token (
strили bool, необязательный) — Токен, используемый в качестве HTTP bearer-авторизации для удалённых файлов. ЕслиTrue, используется токен, сгенерированный командойdiffusers-cli login(сохранённый в~/.huggingface). - revision (
str, необязательный, по умолчанию"main") — Конкретная версия модели, которую следует использовать. Может быть именем ветки, именем тега, идентификатором коммита или любым другим идентификатором, поддерживаемым Git. - custom_revision (
str, необязательный) — Конкретная версия модели, которую следует использовать. Это может быть имя ветки, имя тега или идентификатор коммита, аналогичноrevisionпри загрузке пользовательского конвейера из Hub. По умолчанию используется последняя стабильная версия 🤗 Diffusers. - mirror (
str, optional) — Источник зеркала для решения проблем с доступностью при загрузке модели в Китае. Мы не гарантируем актуальность или безопасность источника, поэтому за дополнительной информацией обращайтесь на сайт зеркала. - device_map (
str, необязательный) — Стратегия, определяющая, как различные компоненты конвейера должны распределяться по доступным устройствам. В настоящее время поддерживается только «balanced»device_map. Подробнее см. здесь. - max_memory (
Dict, необязательный) — Словарь с идентификаторами устройств и максимальным объемом памяти. Если не задан, по умолчанию используется максимальная доступная память для каждого GPU и доступная оперативная память CPU. - offload_folder (
strилиos.PathLike, необязательный) — Путь для выгрузки весов, если device_map содержит значение"disk". - offload_state_dict (
bool, необязательный) — ЕслиTrue, временно выгружает CPU state dict на диск, чтобы избежать нехватки оперативной памяти CPU, если вес CPU state dict + самый большой фрагмент контрольной точки не помещается. По умолчаниюTrue, если используется выгрузка на диск. - low_cpu_mem_usage (
bool, необязательный, по умолчаниюTrue, если версия torch >= 1.9.0, иначеFalse) — Ускоряет загрузку модели, загружая только предобученные веса и не инициализируя их. Это также позволяет не использовать более 1x размера модели в оперативной памяти CPU (включая пиковое потребление) при загрузке модели. Поддерживается только для PyTorch >= 1.9.0. Если вы используете более старую версию PyTorch, установка этого аргумента вTrueвызовет ошибку. - use_safetensors (
bool, необязательный, по умолчаниюNone) — Если установлено значениеNone, веса safetensors загружаются, если они доступны и если библиотека safetensors установлена. Если установлено значениеTrue, модель принудительно загружается из весов safetensors. Если установлено значениеFalse, веса safetensors не загружаются. - use_onnx (
bool, необязательный, по умолчаниюNone) — Если установлено вTrue, веса ONNX всегда будут загружаться, если они присутствуют. Если установлено вFalse, веса ONNX никогда не будут загружаться. По умолчаниюuse_onnxпринимает значение атрибута класса_is_onnx, которое равноFalseдля не-ONNX конвейеров иTrueдля ONNX конвейеров. К весам ONNX относятся как файлы, заканчивающиеся на.onnx, так и на.pb. - kwargs (остальные именованные аргументы в виде словаря, необязательно) —
Можно использовать для переопределения переменных загрузки и сохранения (компонентов конвейера конкретного класса конвейера). Переопределённые компоненты передаются непосредственно в метод
__init__конвейера. Подробнее см. пример ниже. - variant (
str, необязательный) — Загружает веса из файла с указанным вариантом имени, например"fp16"или"ema". - disable_mmap (‘bool’, необязательный, по умолчанию ‘False’) — Определяет, следует ли отключать mmap при загрузке модели Safetensors. Этот параметр может обеспечить лучшую производительность, если модель находится на сетевом диске или жёстком диске, которые могут плохо справляться с частыми операциями перемотки, характерными для mmap.
Создайте пайплайн диффузии PyTorch из предобученных весов пайплайна.
По умолчанию пайплайн устанавливается в режим оценки (model.eval()).
Если вы получаете сообщение об ошибке, приведённое ниже, вам необходимо дообучить веса для вашей целевой задачи:
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.> Для использования частных или защищённых моделей выполните вход с помощью
hf > auth login.
Примеры:
>>> 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