重要提示
您正在查看 NeMo 2.0 文档。此版本对 API 和新库 NeMo Run 进行了重大更改。我们目前正在将 NeMo 1.0 的所有功能移植到 2.0。有关先前版本或 2.0 中尚不可用的功能的文档,请参阅 NeMo 24.07 文档。
NeMo 多模态 API#
模型类#
- class nemo.collections.nlp.models.language_modeling.megatron_base_model.MegatronBaseModel(*args: Any, **kwargs: Any)
基类:
NLPModel
Megatron 基类。所有 NeMo Megatron 模型都从此类继承。
为 nemo 启用模型并行世界。
开启所有 NVIDIA 优化。
如果 cfg.tokenizer 可用,它将加载分词器并将词汇表填充到张量模型并行的正确大小。
如果使用分布式优化器,请配置为与 O2 级别优化和/或模型并行性兼容。
执行梯度裁剪:grad_clip_pl_default 触发 PyTorch Lightning 默认实现,with_distributed_adam 触发分布式优化器的实现,megatron_amp_O2 触发主梯度上的梯度裁剪,否则在模型梯度上执行梯度裁剪。
- __init__(
- cfg: omegaconf.dictconfig.DictConfig,
- trainer: lightning.pytorch.trainer.trainer.Trainer,
- no_lm_init=True,
所有 NeMo 模型应继承的基类
- 参数:
cfg (DictConfig) –
配置对象。cfg 对象应具有(可选)以下子配置
train_ds - 用于实例化训练数据集
validation_ds - 用于实例化验证数据集
test_ds - 用于实例化测试数据集
optim - 用于实例化带有学习率调度器的优化器
trainer (Optional) – Pytorch Lightning Trainer 实例
- class nemo.collections.multimodal.models.text_to_image.stable_diffusion.ldm.ddpm.MegatronLatentDiffusion(*args: Any, **kwargs: Any)#
基类:
NLPAdapterModelMixin
,MegatronBaseModel
Megatron 潜在扩散模型。
- __init__(
- cfg: omegaconf.DictConfig,
- trainer: lightning.pytorch.Trainer,
所有 NeMo 模型应继承的基类
- 参数:
cfg (DictConfig) –
配置对象。cfg 对象应具有(可选)以下子配置
train_ds - 用于实例化训练数据集
validation_ds - 用于实例化验证数据集
test_ds - 用于实例化测试数据集
optim - 用于实例化带有学习率调度器的优化器
trainer (Optional) – Pytorch Lightning Trainer 实例
- setup(stage=None)#
在 DDP 生成后执行的 PTL 钩子。
我们在此处设置数据集,因为 Megatron 数据集需要 DDP 来实例化。有关更多信息,请参阅 PyTorch Lightning 文档: https://pytorch-lightning.readthedocs.io/en/latest/common/lightning_module.html#setup
- 参数:
stage (str, optional) – 可以是 ‘fit’、‘validate’、‘test’ 或 ‘predict’。默认为 None。
- training_step(batch)#
注意:training_step 过去具有以下签名以支持流水线并行
def training_step(self, dataloader_iter, batch_idx)
但是,完整的迭代 CUDA Graph 回调与此签名不兼容,因为我们需要包装数据加载器以在 CUDA Graph 外部生成静态张量。此签名将 next(dataloader) 移动到 CUDA Graph 捕获区域,因此我们禁用了它。
我们的数据加载器生成微批次,然后我们从数据加载器中获取多个微批次,具体取决于全局批次大小和模型并行大小,以生成微批次列表。批次应为微批次列表,并且这些微批次应在 CPU 上。然后,在流水线期间将微批次移动到 GPU。然后,使用 Apex fwd/bwd 函数通过流水线管道传输微批次列表。
- class nemo.collections.multimodal.models.text_to_image.dreambooth.dreambooth.MegatronDreamBooth(*args: Any, **kwargs: Any)#
基类:
NLPAdapterModelMixin
,MegatronBaseModel
- __init__(
- cfg: omegaconf.DictConfig,
- trainer: lightning.pytorch.Trainer,
所有 NeMo 模型应继承的基类
- 参数:
cfg (DictConfig) –
配置对象。cfg 对象应具有(可选)以下子配置
train_ds - 用于实例化训练数据集
validation_ds - 用于实例化验证数据集
test_ds - 用于实例化测试数据集
optim - 用于实例化带有学习率调度器的优化器
trainer (Optional) – Pytorch Lightning Trainer 实例
- setup(stage=None)#
在 DDP 生成后执行的 PTL 钩子。
我们在此处设置数据集,因为 Megatron 数据集需要 DDP 来实例化。有关更多信息,请参阅 PyTorch Lightning 文档: https://pytorch-lightning.readthedocs.io/en/latest/common/lightning_module.html#setup
- 参数:
stage (str, optional) – 可以是 ‘fit’、‘validate’、‘test’ 或 ‘predict’。默认为 None。
- training_step(dataloader_iter)#
我们的数据加载器生成微批次,然后我们从数据加载器中获取多个微批次,具体取决于全局批次大小和模型并行大小,以生成微批次列表。批次应为微批次列表,并且这些微批次应在 CPU 上。然后,在流水线期间将微批次移动到 GPU。然后,使用 Apex fwd/bwd 函数通过流水线管道传输微批次列表。
- class nemo.collections.multimodal.models.text_to_image.controlnet.controlnet.MegatronControlNet(*args: Any, **kwargs: Any)#
-
- __init__(
- cfg: omegaconf.DictConfig,
- trainer: lightning.pytorch.Trainer,
所有 NeMo 模型应继承的基类
- 参数:
cfg (DictConfig) –
配置对象。cfg 对象应具有(可选)以下子配置
train_ds - 用于实例化训练数据集
validation_ds - 用于实例化验证数据集
test_ds - 用于实例化测试数据集
optim - 用于实例化带有学习率调度器的优化器
trainer (Optional) – Pytorch Lightning Trainer 实例
- setup(stage=None)#
在 DDP 生成后执行的 PTL 钩子。
我们在此处设置数据集,因为 Megatron 数据集需要 DDP 来实例化。有关更多信息,请参阅 PyTorch Lightning 文档: https://pytorch-lightning.readthedocs.io/en/latest/common/lightning_module.html#setup
- 参数:
stage (str, optional) – 可以是 ‘fit’、‘validate’、‘test’ 或 ‘predict’。默认为 None。
- training_step(dataloader_iter)#
我们的数据加载器生成微批次,然后我们从数据加载器中获取多个微批次,具体取决于全局批次大小和模型并行大小,以生成微批次列表。批次应为微批次列表,并且这些微批次应在 CPU 上。然后,在流水线期间将微批次移动到 GPU。然后,使用 Apex fwd/bwd 函数通过流水线管道传输微批次列表。
- class nemo.collections.multimodal.models.text_to_image.imagen.imagen.MegatronImagen(*args: Any, **kwargs: Any)#
-
- __init__(
- cfg: omegaconf.DictConfig,
- trainer: lightning.pytorch.Trainer,
所有 NeMo 模型应继承的基类
- 参数:
cfg (DictConfig) –
配置对象。cfg 对象应具有(可选)以下子配置
train_ds - 用于实例化训练数据集
validation_ds - 用于实例化验证数据集
test_ds - 用于实例化测试数据集
optim - 用于实例化带有学习率调度器的优化器
trainer (Optional) – Pytorch Lightning Trainer 实例
- setup(stage=None)#
在 DDP 生成后执行的 PTL 钩子。
我们在此处设置数据集,因为 Megatron 数据集需要 DDP 来实例化。有关更多信息,请参阅 PyTorch Lightning 文档: https://pytorch-lightning.readthedocs.io/en/latest/common/lightning_module.html#setup
- 参数:
stage (str, optional) – 可以是 ‘fit’、‘validate’、‘test’ 或 ‘predict’。默认为 None。
- training_step(dataloader_iter)#
我们的数据加载器生成微批次,然后我们从数据加载器中获取多个微批次,具体取决于全局批次大小和模型并行大小,以生成微批次列表。批次应为微批次列表,并且这些微批次应在 CPU 上。然后,在流水线期间将微批次移动到 GPU。然后,使用 Apex fwd/bwd 函数通过流水线管道传输微批次列表。
- validation_step(dataloader_iter)#
我们的数据加载器生成微批次,然后我们从数据加载器中获取多个微批次,具体取决于全局批次大小和模型并行大小,以生成微批次列表。然后,使用 megatron-core fwd/bwd 函数通过流水线管道传输微批次列表。
模块#
- class nemo.collections.multimodal.modules.stable_diffusion.diffusionmodules.openaimodel.UNetModel(*args: Any, **kwargs: Any)#
基类:
Module
具有注意力和时间步长嵌入的完整 UNet 模型。
- 参数:
in_channels (int) – 输入张量中的通道数。
model_channels (int) – 模型的基本通道计数。
out_channels (int) – 输出张量中的通道数。
num_res_blocks (int) – 每个下采样的残差块数。
attention_resolutions (set/list/tuple) – 应用注意力的下采样率。例如,如果这包括 4,则在 4 倍下采样时使用注意力。
dropout (float) – dropout 概率。
channel_mult (list/tuple) – UNet 每个级别的通道乘数。
conv_resample (bool) – 如果为 True,则使用学习的卷积进行上采样和下采样。
dims (int) – 确定信号是 1D、2D 还是 3D。
num_classes (int, optional) – 如果指定,模型将变为类条件模型,并具有给定的类数。
use_checkpoint (bool) – 如果为 True,则使用梯度检查点以减少内存使用量。
num_heads (int) – 每个注意力层中的注意力头数。
num_heads_channels (int, optional) – 如果指定,则覆盖 num_heads 并为每个注意力头使用固定的通道宽度。
num_heads_upsample (int, optional) – 为上采样设置不同的头数。已弃用。
use_scale_shift_norm (bool) – 如果为 True,则使用类似 FiLM 的条件机制。
resblock_updown (bool) – 如果为 True,则对上/下采样使用残差块。
use_new_attention_order (bool) – 如果为 True,则使用不同的注意力模式以提高效率。
- class nemo.collections.multimodal.modules.imagen.diffusionmodules.nets.UNetModel(*args: Any, **kwargs: Any)#
基类:
Module
用于 Imagen Base 和 SR 模型的具有注意力和时间步长嵌入的完整 UNet 模型。
- 参数:
embed_dim – 嵌入的维度。也用于计算 ResBlock 中的通道数。
image_size – 输入图像大小。用于计算在 UNet 中注入注意力层的位置。
channels – 输入通道数,默认为 3。
text_embed_dim – 条件文本嵌入的维度。不同的文本编码器和不同的模型版本具有不同的值,默认为 512
num_res_blocks – UNet 每个级别的 ResBlock 数量,默认为 3。
channel_mult – 与 embed_dim 一起使用以计算 UNet 每个级别的通道数,默认为 [1, 2, 3, 4]
num_attn_heads – 注意力层中的头数,默认为 4。
per_head_channels – 每个注意力头的通道数,默认为 64。
cond_dim – 条件投影的维度,默认为 512。
attention_type – 注意力层的类型,默认为 ‘fused’。
feature_pooling_type – 池化类型,默认为 ‘attention’。
learned_sinu_pos_emb_dim – 学习的时间位置嵌入的维度。0 表示未学习的时间步长嵌入。默认为 16
attention_resolutions – 注入注意力层的分辨率列表。默认为 [8, 16, 32]
dropout – dropout 率,默认为 0。
use_null_token – 是否为注意力创建学习的空标记,默认为 False。
init_conv_kernel_size – 初始 Conv 内核大小,默认为 3。
gradient_checkpointing – 是否使用梯度检查点,默认为 False。
scale_shift_norm – 是否使用 scale shift norm,默认为 False。
stable_attention – 是否使用数值稳定的注意力计算,默认为 True。
flash_attention – 是否使用 flash attention 计算,默认为 False。
resblock_updown – 是否使用 ResBlock 或 Downsample/Upsample,默认为 False。
resample_with_conv – 当 resblock_updown=False 时,是否除了 Pooling&ConvTranspose 外还使用 conv。默认为 True。
low_res_cond – 是否以低分辨率输入为条件,用于 SR 模型。默认为 False。
noise_cond_aug – 是否使用低分辨率输入添加噪声条件增强。默认为 False。
- class nemo.collections.multimodal.modules.imagen.diffusionmodules.nets.EfficientUNetModel(*args: Any, **kwargs: Any)#
基类:
Module
用于 Imagen SR 模型的具有注意力和时间步长嵌入的完整高效 UNet 模型。
- 参数:
embed_dim – 嵌入的维度。也用于计算 ResBlock 中的通道数。
image_size – 输入图像大小。用于计算在 UNet 中注入注意力层的位置。
channels – 输入通道数,默认为 3。
text_embed_dim – 条件文本嵌入的维度。不同的文本编码器和不同的模型版本具有不同的值,默认为 512
channel_mult – 与 embed_dim 一起使用以计算 UNet 每个级别的通道数,默认为 [1, 1, 2, 4, 8]。
num_attn_heads – 注意力层中的头数,默认为 8。
per_head_channels – 每个注意力头的通道数,默认为 64。
attention_type – 注意力层的类型,默认为 ‘fused’。
atnn_enabled_at – 是否在每个级别启用注意力,默认为 [0, 0, 0, 0, 1]。
feature_pooling_type – 池化类型,默认为 ‘attention’。
stride – ResBlock 中的步幅,默认为 2。
num_resblocks – 与 num_res_blocks 一起使用以计算高效 UNet 每个级别的残差块数。默认为 [1, 2, 4, 8, 8]。
learned_sinu_pos_emb_dim – 学习的时间位置嵌入的维度。0 表示未学习的时间步长嵌入。默认为 16
use_null_token – 是否为注意力创建学习的空标记,默认为 False。
init_conv_kernel_size – 初始 Conv 内核大小,默认为 3。
gradient_checkpointing – 是否使用梯度检查点,默认为 False。
scale_shift_norm – 是否使用 scale shift norm,默认为 False。
stable_attention – 是否使用数值稳定的注意力计算,默认为 True。
flash_attention – 是否使用 flash attention 计算,默认为 False。
skip_connection_scaling – 是否对 ResBlock 跳跃连接使用 1/sqrt(2) 缩放,默认为 False。
noise_cond_aug – 是否使用低分辨率输入添加噪声条件增强。默认为 False。
- class nemo.collections.multimodal.models.text_to_image.stable_diffusion.ldm.autoencoder.AutoencoderKL(*args: Any, **kwargs: Any)#
基类:
LightningModule
- __init__(
- ddconfig,
- embed_dim,
- lossconfig=None,
- ckpt_path=None,
- ignore_keys=[],
- image_key='image',
- colorize_nlabels=None,
- from_NeMo=False,
- monitor=None,
- from_pretrained: str | None = None,
- decode(z)#
将潜在表示解码回像素空间。
- encode(x)#
将像素空间中的输入图像编码为潜在表示。
- class nemo.collections.multimodal.modules.stable_diffusion.encoders.modules.FrozenMegatronCLIPEmbedder(*args: Any, **kwargs: Any)#
基类:
AbstractEmbModel
- __init__(
- restore_from_path,
- device='cuda',
- layer='last',
- freeze=True,
- cfg=None,
- always_return_pooled=False,
- enable_lora_finetune=False,
- forward(text)#
从输入文本获取嵌入
- class nemo.collections.multimodal.modules.imagen.encoder.t5encoder.T5Encoder(*args: Any, **kwargs: Any)#
基类:
Module
- __init__(max_seq_len=512, encoder_path=None)#
初始化 T5 编码器。
- 参数:
max_seq_len – 最大 token 长度,默认为 512
encoder_path – 如果在磁盘上加载 T5,则为可选,默认为 None
- encode(text_batch, device='cuda')#
将一批文本编码为 T5 嵌入。
- class nemo.collections.multimodal.models.text_to_image.controlnet.controlnet.ControlledUnetModel(*args: Any, **kwargs: Any)#
基类:
UNetModel
修改后的 Unet 类,在前向传播过程中结合了控制副本和冻结副本的输出。
- forward(
- x,
- timesteps=None,
- context=None,
- control=None,
- only_mid_control=False,
- **kwargs,
- 参数:
x – 扩散过程的潜在变量
timesteps – 扩散步骤
context – 指导去噪过程的文本嵌入
control – 来自每个对应层的控制副本的输出
only_mid_control – 是否仅添加来自中间块的控制副本的输出
数据集#
- class nemo.collections.multimodal.data.common.webdataset.WebDatasetCommon(*args: Any, **kwargs: Any)#
基类:
IterableDataset
NeMo 多模态模型共享的通用数据集对象。
- class nemo.collections.multimodal.data.dreambooth.dreambooth_dataset.DreamBoothDataset(*args: Any, **kwargs: Any)#
基类:
Dataset
用于准备实例和类别图像以及提示以微调模型的数据集。它预处理图像并标记化提示。
- 参数:
instance_data_root – 必需,包含对象图像文件的目录
instance_prompt – 带有与实例图像关联的特殊 token 的 captions(描述)
with_prior_preservation – 是否使用来自骨干网络的原始推理输出正则化模型微调
reg_data_root – 用于保存来自骨干网络的推理图像的目录
reg_prompt – 用于生成正则化图像的 prompt(提示)
size – 调整图像大小以用于训练数据管道
center_crop – 是否对输入图像执行中心裁剪
load_cache_latents – 设置为 True 时,图像将转换为缓存的潜在变量,这些变量将直接加载用于训练
vae – vae 实例,用于将图像从像素空间编码到潜在空间