Diffusers documentation

LongCat-AudioDiT

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

LongCat-AudioDiT

LongCat-AudioDiT là mô hình khuếch tán từ văn bản sang âm thanh của Meituan LongCat. Tích hợp diffusers cung cấp giao diện DiffusionPipeline tiêu chuẩn cho việc tạo âm thanh có điều kiện từ văn bản.

Pipeline này được điều chỉnh từ bản triển khai tham chiếu LongCat-AudioDiT: https://github.com/meituan-longcat/LongCat-AudioDiT

Pipeline này hỗ trợ nạp từ một thư mục cục bộ hoặc kho lưu trữ Hugging Face Hub ở định dạng diffusers (chứa các thư mục con text_encoder/, transformer/, vae/, tokenizer/ và scheduler/).

Cách sử dụng

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)

Mẹo

  • audio_duration_s là cách trực tiếp nhất để kiểm soát thời lượng đầu ra.
  • Sử dụng generator=torch.Generator("cuda").manual_seed(42) để đảm bảo quá trình tạo ra có thể tái lập được.
  • Hình dạng đầu ra là (batch, channels, samples) - sử dụng .audios[0, 0] để lấy một mẫu âm thanh đơn lẻ.
  • Pipeline xuất ra âm thanh mono (1 kênh). Nếu bạn cần âm thanh stereo, bạn có thể nhân đôi kênh: audio.unsqueeze(0).repeat(1, 2, 1).

LongCatAudioDiTPipeline

lớp diffusers.LongCatAudioDiTPipeline

< >

( vae: LongCatAudioDiTVaetext_encoder: UMT5EncoderModeltokenizer: PreTrainedTokenizerBasetransformer: LongCatAudioDiTTransformerscheduler: diffusers.schedulers.scheduling_flow_match_euler_discrete.FlowMatchEulerDiscreteScheduler | None = None )

__call__

< >

( 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

Tham số

  • prompt (str hoặc list[str]) — Prompt hoặc các prompt định hướng cho việc tạo âm thanh.
  • negative_prompt (str hoặc list[str], tùy chọn) — Prompt âm cho classifier-free guidance.
  • audio_duration_s (float, tùy chọn) — Thời lượng âm thanh đích tính bằng giây. Bỏ qua khi latents được cung cấp.
  • latents (torch.Tensor, tùy chọn) — Các latents nhiễu đã được tạo trước, có hình dạng (batch_size, duration, latent_dim).
  • num_inference_steps (int, mặc định là 16) — Số bước khử nhiễu.
  • guidance_scale (float, mặc định là 4.0) — Thang độ dẫn hướng cho classifier-free guidance.
  • generator (torch.Generator hoặc list[torch.Generator], tùy chọn) — Bộ tạo ngẫu nhiên.
  • output_type (str, mặc định là "np") — Định dạng đầu ra: "np", "pt" hoặc "latent".
  • return_dict (bool, mặc định là True) — Có nên trả về AudioPipelineOutput hay không.
  • callback_on_step_end (Callable, tùy chọn) — Một hàm được gọi vào cuối mỗi bước khử nhiễu, nhận vào pipeline, chỉ số bước, timestep và các tensor đầu vào được chỉ định bởi callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, mặc định là ["latents"]) — Các tensor đầu vào được truyền cho callback_on_step_end.

Trả về

AudioPipelineOutput hoặc tuple

AudioPipelineOutput nếu return_dict là True, nếu không thì là một tuple. Khi trả về tuple, phần tử đầu tiên là dạng sóng âm thanh đã tạo.

Hàm được gọi khi gọi pipeline cho việc sinh.

Ví dụ:

>>> 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

< >

( pretrained_model_name_or_path: str | os.PathLike**kwargs )

Tham số

  • pretrained_model_name_or_path (str hoặc os.PathLike, tùy chọn) — Có thể là:
    • Một chuỗi, repo id (ví dụ CompVis/ldm-text2im-large-256) của một pipeline được huấn luyện trước có trên Hub.
    • Đường dẫn đến một thư mục (ví dụ ./my_pipeline_directory/) chứa trọng số pipeline được lưu bằng save_pretrained().
  • dtype (torch.dtype hoặc dict[str, Union[str, torch.dtype]], tuỳ chọn) — Ghi đè torch.dtype mặc định và nạp mô hình với một dtype khác. Để nạp các mô hình con với các dtype khác nhau, hãy truyền một dict (ví dụ {'transformer': torch.bfloat16, 'vae': torch.float16}). Đặt dtype mặc định cho các thành phần không được chỉ định bằng default (ví dụ {'transformer': torch.bfloat16, 'default': torch.float16}). Nếu một thành phần không được chỉ định và không có default được đặt, torch.float32 sẽ được sử dụng.
  • custom_pipeline (str, tuỳ chọn) —

    > 🧪 Đây là một tính năng thử nghiệm và có thể thay đổi trong tương lai.

    Có thể là một trong các lựa chọn sau:

    • Một chuỗi, repo id (ví dụ hf-internal-testing/diffusers-dummy-pipeline) của một pipeline tùy chỉnh được lưu trữ trên Hub. Kho phải chứa một tệp có tên pipeline.py định nghĩa pipeline tùy chỉnh.
    • Một chuỗi, tên tệp của một pipeline cộng đồng được lưu trữ trên GitHub dưới Community. Tên tệp hợp lệ phải khớp với tên tệp chứ không phải script pipeline (clip_guided_stable_diffusion thay vì clip_guided_stable_diffusion.py). Các pipeline cộng đồng luôn được tải từ nhánh main hiện tại trên GitHub.
    • Đường dẫn đến một thư mục (./my_pipeline_directory/) chứa một pipeline tùy chỉnh. Thư mục phải chứa một tệp có tên là pipeline.py để định nghĩa pipeline tùy chỉnh.

    Để biết thêm thông tin về cách tải và tạo các pipeline tùy chỉnh, hãy xem Tải và Thêm các Pipeline tùy chỉnh

  • force_download (bool, tùy chọn, mặc định là False) — Có nên buộc tải lại (re-download) trọng số mô hình và các tệp cấu hình, ghi đè lên các phiên bản đã được lưu trong bộ nhớ đệm nếu chúng tồn tại hay không.
  • cache_dir (Union[str, os.PathLike], tùy chọn) — Đường dẫn đến thư mục nơi cấu hình mô hình được huấn luyện trước đã tải xuống được lưu đệm nếu không sử dụng bộ lưu đệm tiêu chuẩn.
  • proxies (Dict[str, str], tùy chọn) — Một từ điển các máy chủ proxy để sử dụng theo giao thức hoặc điểm cuối, ví dụ, {'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}. Các proxy này được sử dụng cho mỗi yêu cầu.
  • output_loading_info(bool, optional, mặc định là False) — Có nên trả về một từ điển chứa các khóa bị thiếu, các khóa không mong đợi và thông báo lỗi hay không.
  • local_files_only (bool, tùy chọn, mặc định là False) — Xác định có chỉ tải trọng số và tệp cấu hình của mô hình từ cục bộ hay không. Nếu đặt thành True, mô hình sẽ không được tải xuống từ Hub.
  • token (str hoặc bool, tùy chọn) — Token được sử dụng làm HTTP bearer authorization cho các tệp từ xa. Nếu True, token được tạo từ diffusers-cli login (được lưu trong ~/.huggingface) sẽ được sử dụng.
  • revision (str, tùy chọn, mặc định là "main") — Phiên bản mô hình cụ thể cần sử dụng. Nó có thể là tên nhánh, tên thẻ, id commit, hoặc bất kỳ định danh nào được Git cho phép.
  • custom_revision (str, tùy chọn) — Phiên bản mô hình cụ thể cần sử dụng. Nó có thể là tên nhánh, tên thẻ, hoặc id commit tương tự như revision khi tải một pipeline tùy chỉnh từ Hub. Mặc định là phiên bản 🤗 Diffusers ổn định mới nhất.
  • mirror (str, optional) — Nguồn mirror để giải quyết các vấn đề về khả năng truy cập nếu bạn đang tải xuống một model tại Trung Quốc. Chúng tôi không đảm bảo tính kịp thời hay an toàn của nguồn, và bạn nên tham khảo trang web mirror để biết thêm thông tin.
  • device_map (str, tùy chọn) — Chiến lược quy định cách các thành phần khác nhau của pipeline nên được đặt trên các thiết bị khả dụng. Hiện tại, chỉ hỗ trợ device_map “balanced”. Xem đây để biết thêm.
  • max_memory (Dict, tùy chọn) — Một từ điển định danh thiết bị cho bộ nhớ tối đa. Nếu không được đặt, giá trị mặc định sẽ là bộ nhớ tối đa khả dụng cho mỗi GPU và RAM CPU khả dụng.
  • offload_folder (str hoặc os.PathLike, tùy chọn) — Đường dẫn để offload trọng số nếu device_map chứa giá trị "disk".
  • offload_state_dict (bool, tùy chọn) — Nếu True, sẽ tạm thời offload state dict trên CPU xuống ổ cứng để tránh hết RAM CPU nếu trọng số của state dict trên CPU + shard lớn nhất của checkpoint không vừa. Mặc định là True khi có offload xuống đĩa.
  • low_cpu_mem_usage (bool, tùy chọn, mặc định là True nếu phiên bản torch >= 1.9.0, ngược lại là False) — Tăng tốc quá trình tải mô hình bằng cách chỉ tải trọng số được huấn luyện trước mà không khởi tạo trọng số. Điều này cũng cố gắng không sử dụng nhiều hơn 1 lần kích thước mô hình trong bộ nhớ CPU (bao gồm bộ nhớ đỉnh) trong khi tải mô hình. Chỉ hỗ trợ cho PyTorch >= 1.9.0. Nếu bạn đang sử dụng phiên bản PyTorch cũ hơn, việc đặt tham số này thành True sẽ gây ra lỗi.
  • use_safetensors (bool, tùy chọn, mặc định là None) — Nếu được đặt thành None, các trọng số safetensors sẽ được tải xuống nếu chúng có sẵn và nếu thư viện safetensors đã được cài đặt. Nếu được đặt thành True, mô hình sẽ được tải bắt buộc từ các trọng số safetensors. Nếu được đặt thành False, các trọng số safetensors sẽ không được tải.
  • use_onnx (bool, tuỳ chọn, mặc định là None) — Nếu đặt thành True, trọng số ONNX sẽ luôn được tải xuống nếu có. Nếu đặt thành False, trọng số ONNX sẽ không bao giờ được tải xuống. Mặc định, use_onnx có giá trị mặc định là thuộc tính lớp _is_onnx, vốn là False đối với các pipeline không phải ONNX và True đối với các pipeline ONNX. Trọng số ONNX bao gồm cả các tệp kết thúc bằng .onnx và .pb.
  • kwargs (từ điển các tham số từ khóa còn lại, tùy chọn) — Có thể được dùng để ghi đè lên các biến load và saveable (các thành phần pipeline của lớp pipeline cụ thể). Các thành phần bị ghi đè sẽ được truyền trực tiếp vào phương thức __init__ của pipeline. Xem ví dụ bên dưới để biết thêm thông tin.
  • variant (str, tùy chọn) — Tải trọng số từ tên tệp biến thể được chỉ định, chẳng hạn như "fp16" hoặc "ema".
  • disable_mmap (‘bool’, tùy chọn, mặc định là ‘False’) — Có vô hiệu hóa mmap khi tải mô hình Safetensors hay không. Tùy chọn này có thể cho hiệu suất tốt hơn khi mô hình nằm trên ổ đĩa mạng hoặc ổ cứng, những nơi có thể không xử lý tốt tính chất truy cập ngẫu nhiên (seeky) của mmap.

Tạo một pipeline khuếch tán PyTorch từ trọng số pipeline được huấn luyện trước.

Pipeline được đặt ở chế độ đánh giá (model.eval()) theo mặc định.

Nếu bạn nhận được thông báo lỗi bên dưới, bạn cần tinh chỉnh trọng số cho tác vụ hạ nguồn của mình:

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.

> Để sử dụng các mô hình riêng tư hoặc được kiểm soát, hãy đăng nhập bằng hf > auth login.

Ví dụ:

>>> 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
Update on GitHub