基于昇腾+MindSpore,玩转HunyuanVideo-I2V图生视频!

HunyuanVideo-I2V是腾讯混元系列模型中一个新型的图像到视频转换模型。用户只需要提供一张图片,简要描述要生成的视频内容,例如动作描述,镜头位置等等,HunyuanVideo-I2V就可以让图片动起来,生成高清连贯的视频,最高支持720P 5s。

昇思MindSpore团队现已完成对HunyuanVideo-I2V的适配,并将其开源至MindSpore ONE仓库,本文将要给大家详细介绍,如何基于昇思MindSpore和Atlas 800T A2,完整实现HunyuanVideo-I2V从图像到视频生成的部署流程。

  • MindSpore ONE开源代码仓链接:https://github.com/mindspore-lab/mindone/tree/master/examples/hunyuanvideo-i2v

  • 魔乐社区代码仓链接:https://modelers.cn/models/MindSpore-Lab/hyvideo

模型介绍

HunyuanVideo-I2V和HunyuanVideo的模型结构相似,都采取了双文本编码器(Llava和CLIP)和单双流DiT Block,以实现对文本和图像多模态信息的融合。HunyuanVideo的模型结构如下图所示:

image.png

HunyuanVideo-I2V的总blocks数量是60,其中单流block数量为40, 双流block数量为20,模型的参数量更是达到了130亿。因此,使用HunyuanVideo-I2V生成720P视频的峰值NPU内存比较高,达到了62GB。推荐使用昇腾Atlas 800T A2机器(64GB),以获得更好的性能。

HunyuanVideo-I2V在HunyuanVideo (T2V)的基础上,将参考图像的潜在特征和高斯噪声进行拼接和融合,作为DiT模型的输入,在每一步去噪的前后进行首帧图像潜在特征的替换。这样不仅实现了对参考图像的一致性保持,同时也丰富了生成视频的视觉效果。

在代码实现上,关键的处理包括对于image latent和输入噪声的融合,如下:

def prepare_latents:
    ...
    if i2v_mode and i2v_stability:
        if img_latents.shape[2] == 1:  # img_latents是参考图像的潜在特征
            img_latents = mint.tile(img_latents, (1, 1, video_length, 1, 1))
        x0 = randn_tensor(shape, generator=generator, dtype=dtype)  # 高斯随机噪声
        x1 = img_latents
        t = ms.tensor([0.999])
        latents = x0 * t + x1 * (1 - t)  # 对参考图像的潜在特征和高斯随机噪声进行混合
        latents = latents.to(dtype=dtype)
    if latents is None:
        latents = randn_tensor(shape, generator=generator, dtype=dtype)

可以看出,i2v_stability 为True时,会进行参考图像和随机噪声的潜在混合,以保持对参考图像的一致性。理论上, 当i2v_stability为False时,生成视频会包含更加丰富的动态信息。

其次,在去噪的前后,对首帧图像的潜在特征进行替换:

def __call__:
    ...
    if i2v_mode and i2v_condition_type == "token_replace":
        latents = mint.concat([img_latents.to(latents.dtype), latents[:, :, 1:, :, :]], dim=2)  # 在去噪前进行首帧图像潜在特征的替换
    ...
    noise_pred = self.transformer(xxx)
    ...
    if i2v_mode and i2v_condition_type == "token_replace":
        latents = self.scheduler.step(
            noise_pred[:, :, 1:, :, :], t, latents[:, :, 1:, :, :], **extra_step_kwargs, return_dict=False
        )[0]
        latents = mint.concat([img_latents.to(latents.dtype), latents], dim=2)   # 在去噪后进行首帧图像潜在特征的替换

在每一步去噪的前后进行首帧图像潜在特征的替换,有利于对参考图像的一致性保持。

模型介绍

1、环境准备

image.png

  • CANN下载:https://www.hiascend.com/developer/download/community/result?module=cann&cann=8.0.RC3.beta1
  • MindSpore下载:https://www.mindspore.cn/install

2、安装依赖

git clone https://github.com/mindspore-lab/mindone
cd mindone/examples/hunyuanvideo-i2v
pip install -r requirements.txt

3、模型下载

模型

下载链接

说明

hyvideo-i2v-13b

https://huggingface.co/tencent/HunyuanVideo-I2V/tree/main

Transformer (LoRA) 及 VAE权重

llava-llama-3-8b

https://huggingface.co/xtuner/llava-llama-3-8b-v1_1-transformers

多模态模型权重

clip-vit-large-patch14

https://huggingface.co/openai/clip-vit-large-patch14

CLIP模型权重

FILE_PATH="/path/to/your/image.jpg"
python3 sample_image2video.py \
    --prompt "An Asian man with short hair in black tactical uniform and white clothes waves a firework stick." \
    --i2v-image-path $FILE_PATH \
    --model HYVideo-T/2 \
    --i2v-mode \
    --i2v-resolution 720p \
    --i2v-stability \
    --infer-steps 50 \
    --video-length 129 \
    --flow-reverse \
    --flow-shift 7.0 \
    --seed 0 \
    --embedded-cfg-scale 6.0 \
    --save-path ./results \

从 Hugging Face 下载所需的模型,可以参考如下命令:

huggingface-cli download tencent/HunyuanVideo-I2V --local-dir ./ckpts

4、运行推理

进行图生视频推理也非常简单,运行下面的命令即可:

如果想要自定义视频生成的内容,只需要修改--prompt,输入你脑海中的创意描述即可。另外,你还可以通过修改--i2v-resolution来控制输出的视频分辨率。目前可选择的分辨率有"720p", "540p"和"360p"。

如果你想要尝试LoRA权重来实现更加丰富的视觉效果,只需要在上述的命令行中增加以下的参数即可:

python3 sample_image2video.py \
   --prompt  $PROMPT \
   --i2v-image-path  $FILE_PATH \
   --lora-path ./ckpts/hunyuan-video-i2v-720p/lora/embrace_kohaya_weights.safetensors \
   --model HYVideo-T/2 \
   --i2v-mode \
   --i2v-resolution 720p \
   --i2v-stability \
   --infer-steps 50 \
   --video-length 129 \
   --flow-reverse \
   --flow-shift 5.0 \
   --embedded-cfg-scale 6.0 \
   --seed 0 \
   --save-path ./results \
   --use-lora \
   --lora-scale 1.0 \

性能实测

基于Atlas 800T A2和MindSpore2.5.0的性能测试结果如下:

image.png

马上体验

我们在魔乐社区上完成了Hunyuanvideo-i2v的部署!

欢迎体验:https://modelers.cn/spaces/MindSpore-lab/hyvideo-i2v

### HunYuanVideo-I2V 的多 GPU 部署配置指南 在多卡环境下部署 HunYuanVideo-I2V 涉及多个关键步骤,包括环境准备、模型加载以及分布式计算设置。以下是详细的说明: #### 1. 环境搭建 为了实现高效的多 GPU 计算,建议使用 PyTorch 提供的 `torch.distributed` 工具来管理并行化操作。具体来说,需要安装以下依赖项: - **PyTorch**: 至少版本 1.9 或更高。 - **CUDA Toolkit**: 根据硬件选择合适的 CUDA 版本。 - **NCCL**: NVIDIA Collective Communications Library (NCCL),用于加速跨 GPU 数据传输。 可以通过以下命令创建虚拟环境并安装必要的库[^4]: ```bash conda create -n hunyuan-video python=3.8 pip install torch torchvision torchaudio cudatoolkit=11.3 ``` #### 2. 模型分发与加载 HunYuanVideo-I2V 是基于像到视频成的大规模预训练模型,在多 GPU 场景下可以利用数据并行或模型并行的方式进行扩展。对于该模型的具体部署流程如下: ##### a. 下载模型权重 按照官方文档指引下载 HunYuanVideo-I2V 权重文件,并将其存储至指定路径 `/ComfyUI/models/checkpoints/` 中。 ##### b. 初始化分布式进程组 在脚本开头引入必要模块并初始化分布式环境: ```python import os import torch from torch.nn.parallel import DistributedDataParallel as DDP from torch.utils.data.distributed import DistributedSampler def setup_distributed(rank, world_size): os.environ['MASTER_ADDR'] = 'localhost' os.environ['MASTER_PORT'] = '12355' # initialize the process group torch.distributed.init_process_group( backend="nccl", rank=rank, world_size=world_size) setup_distributed(rank=torch.cuda.current_device(), world_size=len(os.environ["CUDA_VISIBLE_DEVICES"].split(','))) ``` 此处定义了 `setup_distributed()` 函数用来启动 NCCL 后端通信机制。 ##### c. 加载模型实例 假设已成功导入自定义网络结构类,则可通过以下方式完成模型实例化及其封装为 DDP 实例的操作: ```python model = YourModelClass() # 替换为您实际使用的模型架构 device = f'cuda:{torch.cuda.current_device()}' model.to(device) ddp_model = DDP(model, device_ids=[device]) ``` 注意这里调用了 `DDP` 构造器传入原始模型对象作为参数之一,从而实现了对其内部前向传播逻辑自动切片处理的功能。 #### 3. 调整批大小及其他超参设定 由于增加了可用资源数量,理论上允许适当增大每批次样本量以充分利用设备性能优势。然而过高的 batch size 可能引发内存溢出等问题,因此需谨慎调整直至找到最佳平衡点为止。 另外还需考虑梯度累积技术的应用场合——当单步更新所需显存量超出当前物理限制时尤为适用;通过累加多次反向传播结果后再执行一次完整的优化迭代过程即可缓解这一矛盾状况的发概率。 --- ### 总结 综上所述,针对 HunYuanVideo-I2V 这样复杂的深度学习项目实施高效稳定的多 GPU 并行运算方案并非易事,但从上述几个方面入手能够显著提升整体运行效率和服务质量水平。当然除了以上提到的内容之外还存在诸多细节需要注意把控好每一个环节才能真正达到预期目标效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值