网站 开发 外包,个人网站如何备案,肥西网站建设,0基础学网站建设HunyuanVideo 文生视频模型实践
flyfish
运行 HunyuanVideo 模型使用文本生成视频的推荐配置#xff08;batch size 1#xff09;#xff1a;
模型分辨率(height/width/frame)峰值显存HunyuanVideo720px1280px129f60GHunyuanVideo544px960px129f45G
本项目适用于使用 N…HunyuanVideo 文生视频模型实践
flyfish
运行 HunyuanVideo 模型使用文本生成视频的推荐配置batch size 1
模型分辨率(height/width/frame)峰值显存HunyuanVideo720px1280px129f60GHunyuanVideo544px960px129f45G
本项目适用于使用 NVIDIA GPU 和支持 CUDA 的设备 模型在单张 80G GPU 上测试运行 720px1280px129f 的最小显存要求是 60GB544px960px129f 的最小显存要求是 45GB。 测试操作系统Linux
HunyuanVideo: A Systematic Framework For Large Video Generation Model
HunyuanVideo/ckpts/文件夹下的模型 HunyuanVideo├──ckpts│ ├──README.md│ ├──hunyuan-video-t2v-720p│ │ ├──transformers│ │ │ ├──mp_rank_00_model_states.pt│ │ │ ├──mp_rank_00_model_states_fp8.pt│ │ │ ├──mp_rank_00_model_states_fp8_map.pt├ │ ├──vae│ ├──text_encoder│ ├──text_encoder_2├──...关键配置项| 参数 | 默认值 | 描述 |
|:----------------------:|:---------:|:-----------------------------------------:|
| --prompt | None | 用于生成视频的 prompt |
| --video-size | 720 1280 | 生成视频的高度和宽度 |
| --video-length | 129 | 生成视频的帧数 |
| --infer-steps | 50 | 生成时采样的步数 |
| --embedded-cfg-scale | 6.0 | 文本的控制强度 |
| --flow-shift | 7.0 | 推理时 timestep 的 shift 系数值越大高噪区域采样步数越多 |
| --flow-reverse | False | If reverse, learning/sampling from t1 - t0 |
| --neg-prompt | None | 负向词 |
| --seed | 0 | 随机种子 |
| --use-cpu-offload | False | 启用 CPU offload可以节省显存 |
| --save-path | ./results | 保存路径 |## 结果
csharp
(HunyuanVideo) ssssss-Super-Server:~/source/HunyuanVideo$ python3 sample_video.py \--video-size 544 960 \--video-length 129 \--infer-steps 50 \--prompt A cat walks on the grass, realistic style. \--flow-reverse \--use-cpu-offload \--save-path ./results
Namespace(modelHYVideo-T/2-cfgdistill, latent_channels16, precisionbf16, rope_theta256, vae884-16c-hy, vae_precisionfp16, vae_tilingTrue, text_encoderllm, text_encoder_precisionfp16, text_states_dim4096, text_len256, tokenizerllm, prompt_templatedit-llm-encode, prompt_template_videodit-llm-encode-video, hidden_state_skip_layer2, apply_final_normFalse, text_encoder_2clipL, text_encoder_precision_2fp16, text_states_dim_2768, tokenizer_2clipL, text_len_277, denoise_typeflow, flow_shift7.0, flow_reverseTrue, flow_solvereuler, use_linear_quadratic_scheduleFalse, linear_schedule_end25, model_baseckpts, dit_weightckpts/hunyuan-video-t2v-720p/transformers/mp_rank_00_model_states.pt, model_resolution540p, load_keymodule, use_cpu_offloadTrue, batch_size1, infer_steps2, disable_autocastFalse, save_path./results, save_path_suffix, name_suffix, num_videos1, video_size[544, 960], video_length129, promptA cat walks on the grass, realistic style., seed_typeauto, seedNone, neg_promptNone, cfg_scale1.0, embedded_cfg_scale6.0, use_fp8False, reproduceFalse, ulysses_degree1, ring_degree1)
2024-12-21 21:50:51.616 | INFO | hyvideo.inference:from_pretrained:154 - Got text-to-video model root path: ckpts
2024-12-21 21:50:51.616 | INFO | hyvideo.inference:from_pretrained:189 - Building model...
2024-12-21 21:50:52.098 | INFO | hyvideo.inference:load_state_dict:340 - Loading torch model ckpts/hunyuan-video-t2v-720p/transformers/mp_rank_00_model_states.pt...
/home/sss/tool/HunyuanVideo/hyvideo/inference.py:341: FutureWarning: You are using torch.load with weights_onlyFalse (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for weights_only will be flipped to True. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via torch.serialization.add_safe_globals. We recommend you start setting weights_onlyTrue for any use case where you dont have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.state_dict torch.load(model_path, map_locationlambda storage, loc: storage)
2024-12-21 21:51:05.739 | INFO | hyvideo.vae:load_vae:29 - Loading 3D VAE model (884-16c-hy) from: ./ckpts/hunyuan-video-t2v-720p/vae
/home/sss/tool/HunyuanVideo/hyvideo/vae/__init__.py:39: FutureWarning: You are using torch.load with weights_onlyFalse (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for weights_only will be flipped to True. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via torch.serialization.add_safe_globals. We recommend you start setting weights_onlyTrue for any use case where you dont have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.ckpt torch.load(vae_ckpt, map_locationvae.device)
2024-12-21 21:51:07.546 | INFO | hyvideo.vae:load_vae:55 - VAE to dtype: torch.float16
2024-12-21 21:51:07.577 | INFO | hyvideo.text_encoder:load_text_encoder:28 - Loading text encoder model (llm) from: ./ckpts/text_encoder
Loading checkpoint shards: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4/4 [00:0100:00, 2.42it/s]
2024-12-21 21:51:10.888 | INFO | hyvideo.text_encoder:load_text_encoder:50 - Text encoder to dtype: torch.float16
2024-12-21 21:51:10.890 | INFO | hyvideo.text_encoder:load_tokenizer:64 - Loading tokenizer (llm) from: ./ckpts/text_encoder
2024-12-21 21:51:11.263 | INFO | hyvideo.text_encoder:load_text_encoder:28 - Loading text encoder model (clipL) from: ./ckpts/text_encoder_2
2024-12-21 21:51:11.331 | INFO | hyvideo.text_encoder:load_text_encoder:50 - Text encoder to dtype: torch.float16
2024-12-21 21:51:11.332 | INFO | hyvideo.text_encoder:load_tokenizer:64 - Loading tokenizer (clipL) from: ./ckpts/text_encoder_2
2024-12-21 21:51:11.454 | INFO | hyvideo.inference:predict:580 - Input (height, width, video_length) (544, 960, 129)
2024-12-21 21:51:11.469 | DEBUG | hyvideo.inference:predict:640 - height: 544width: 960video_length: 129prompt: [A cat walks on the grass, realistic style.]neg_prompt: [Aerial view, aerial view, overexposed, low quality, deformation, a poor composition, bad hands, bad teeth, bad eyes, bad limbs, distortion]seed: Noneinfer_steps: 50num_videos_per_prompt: 1guidance_scale: 1.0n_tokens: 67320flow_shift: 7.0embedded_guidance_scale: 6.0
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 50/50 [01:2500:00, 42.71s/it]
2024-12-21 21:54:32.410 | INFO | hyvideo.inference:predict:669 - Success, time: 200.9416298866272
huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...
To disable this warning, you can either:- Avoid using tokenizers before the fork if possible- Explicitly set the environment variable TOKENIZERS_PARALLELISM(true | false)
2024-12-21 21:54:34.807 | INFO | __main__:main:55 - Sample save to: ./results/seed452372_A cat walks on the grass, realistic style.mp4代码
import os
import time
from pathlib import Path
from loguru import logger
from datetime import datetimefrom hyvideo.utils.file_utils import save_videos_grid
from hyvideo.config import parse_args
from hyvideo.inference import HunyuanVideoSamplerdef main():# 解析命令行参数args parse_args()# 打印解析得到的参数方便调试和查看输入信息print(args)# 将模型的根路径转换为 Path 对象方便后续路径操作models_root_path Path(args.model_base)# 检查模型根路径是否存在如果不存在则抛出异常if not models_root_path.exists():raise ValueError(fmodels_root 不存在: {models_root_path})# 创建保存样本的文件夹# 如果 save_path_suffix 为空则使用 save_path 作为保存路径否则将后缀添加到 save_path 后save_path args.save_path if args.save_path_suffix else f{args.save_path}_{args.save_path_suffix}# 若保存路径不存在则创建该目录exist_okTrue 表示如果目录已存在不会引发异常if not os.path.exists(args.save_path):os.makedirs(save_path, exist_okTrue)# 从预训练模型的路径加载 HunyuanVideoSampler 模型并传入解析得到的命令行参数hunyuan_video_sampler HunyuanVideoSampler.from_pretrained(models_root_path, argsargs)# 获取更新后的参数可能是因为加载模型时对参数进行了某些调整args hunyuan_video_sampler.args# 开始采样# TODO: 批量推理检查这里可能需要后续完善批量推理的检查逻辑outputs hunyuan_video_sampler.predict(# 输入的提示信息用于引导视频生成promptargs.prompt, # 视频的高度heightargs.video_size[0],# 视频的宽度widthargs.video_size[1],# 视频的长度video_lengthargs.video_length,# 随机种子用于保证结果的可重复性seedargs.seed,# 负向提示信息可能用于引导模型避免生成某些内容negative_promptargs.neg_prompt,# 推理的步数可能影响生成视频的质量和细节infer_stepsargs.infer_steps,# 引导规模可能影响生成结果与提示的符合程度guidance_scaleargs.cfg_scale,# 每个提示对应的视频数量num_videos_per_promptargs.num_videos,# 可能与视频流的偏移有关的参数flow_shiftargs.flow_shift,# 推理的批量大小batch_sizeargs.batch_size,# 可能是嵌入的引导规模参数embedded_guidance_scaleargs.embedded_cfg_scale)# 从输出中获取采样得到的样本可能是生成的视频数据samples outputs[samples]# 保存样本# 检查是否处于分布式环境或当前进程是否是主进程可能用于分布式训练时的保存操作if LOCAL_RANK not in os.environ or int(os.environ[LOCAL_RANK]) 0:for i, sample in enumerate(samples):# 为当前样本添加一个维度可能是为了满足后续保存操作的格式要求sample samples[i].unsqueeze(0)# 获取当前时间并格式化为字符串作为时间戳time_flag datetime.fromtimestamp(time.time()).strftime(%Y-%m-%d-%H:%M:%S)# 构建保存样本的路径包含时间戳、种子信息和提示信息save_path f{save_path}/{time_flag}_seed{outputs[seeds][i]}_{outputs[prompts][i][:100].replace(/,)}.mp4# 使用 save_videos_grid 函数保存视频帧率为 24save_videos_grid(sample, save_path, fps24)# 记录样本保存的路径信息方便查看保存位置logger.info(f样本保存到: {save_path})if __name__ __main__:main()VAE 理解
VAE即变分自编码器Variational Autoencoder是一种生成模型以下是对其的详细介绍
基本架构
• 编码器将输入数据编码成潜在空间中的概率分布参数通常是输出一个均值向量和一个方差向量这两个向量共同描述了潜在变量的正态分布。
• 解码器从潜在空间的概率分布中采样得到潜在变量然后将其解码还原为与输入数据相似的输出。
工作原理
• 编码过程输入数据通过编码器网络编码器学习到输入数据的潜在特征并将这些特征表示为潜在空间中的概率分布参数即均值和方差。
• 重参数化技巧由于概率分布无法直接进行梯度下降优化VAE采用重参数化技巧将潜在变量的采样过程转化为可微分的操作。具体来说通过引入一个随机噪声变量将其与均值和方差相结合从而得到潜在变量的样本这样就可以在反向传播过程中计算梯度并更新网络参数。
• 解码过程采样得到的潜在变量输入到解码器网络解码器根据这些潜在特征尝试重建原始输入数据。
• 损失函数VAE的损失函数由两部分组成一部分是重建误差衡量重建数据与原始数据之间的差异通常使用均方误差等指标另一部分是KL散度衡量编码器输出的概率分布与先验分布一般为标准正态分布之间的差异通过最小化KL散度使潜在空间的分布更加平滑和连续有助于生成更高质量的新样本。
特点
• 生成能力能够学习数据的潜在分布从而生成与训练数据相似但又不完全相同的全新样本可用于图像生成、文本生成等任务。
• 连续且有结构的隐空间在潜在空间中学习到的表示是连续且有结构的这使得样本插值和生成更加自然也便于进行各种基于潜在空间的操作如插值、算术运算等以探索数据的不同特征和属性。
• 概率建模通过最大化似然函数能够有效地捕捉数据的复杂分布为数据建模提供了一种概率视角有助于更好地理解和解释数据的生成过程。
应用场景
• 图像生成可以生成各种类型的图像如手写数字、人脸图像、自然景观等通过调整潜在变量的值可以控制生成图像的不同特征如人脸的表情、年龄、性别等。
• 数据增强在训练数据有限的情况下利用VAE生成与原始数据相似的新样本扩充数据集提高模型在分类、回归等任务上的性能和泛化能力。
• 异常检测先学习正常数据的分布然后对测试数据进行重建如果重建误差较大则认为该数据是异常数据可用于工业设备故障检测、网络安全入侵检测等领域。
• 特征学习与降维通过编码器将高维数据压缩成低维的潜在表示这些潜在特征可以用于后续的机器学习任务如分类、聚类等同时也可以实现数据的可视化降维。
variational 理解
在变分自编码器Variational AutoencoderVAE中“variational”一词主要来源于其采用的变分推断Variational Inference方法以下是对其具体理解
“variational”体现了VAE在建模过程中对数据不确定性的一种变分处理方式通过引入变分分布并利用变分推断方法来近似难以直接计算的真实后验分布从而能够在潜在空间中学习到数据的概率分布实现有效的数据生成和特征学习。这种变分的思想使得VAE在生成模型领域具有独特的优势能够生成具有多样性且符合数据分布的新样本。 变分推断的引入背景
• 在传统的自编码器中编码器将输入数据编码为一个确定性的低维表示即一个固定向量。然而这种表示方式无法捕捉数据的不确定性信息也不利于生成新的样本。而VAE的目标是学习数据的概率分布以便能够生成与训练数据相似的新样本这就需要引入概率模型和推断方法来处理数据的不确定性变分推断便应运而生。
变分推断的基本思想
• 概率图模型框架VAE可以看作是一个概率图模型其中输入数据x与潜在变量z之间存在某种概率关系。理想情况下我们希望直接计算后验分布p(z|x)即给定输入数据x时潜在变量z的分布从而了解数据的内在结构和不确定性。然而这个后验分布往往难以直接计算因为它涉及到复杂的积分运算。
• 变分分布的引入变分推断通过引入一个变分分布q(z|x)来近似真实的后验分布p(z|x)。这个变分分布q(z|x)是参数化的其参数可以通过优化过程来学习使其尽可能地接近真实的后验分布。在VAE中编码器的作用就是学习这个变分分布q(z|x)的参数通常是输出潜在变量z的均值和方差从而定义了一个以这些参数为特征的正态分布作为变分分布。
优化过程与KL散度
• 证据下界ELBO为了衡量变分分布q(z|x)与真实后验分布p(z|x)之间的相似程度变分推断定义了一个证据下界Evidence Lower BOundELBO它是模型对数似然函数的一个下界。ELBO由两部分组成一部分是重建误差衡量解码器根据潜在变量z重建输入数据x的质量另一部分是KL散度衡量变分分布q(z|x)与先验分布p(z)之间的差异。
• 优化目标VAE的训练目标就是最大化ELBO这等价于最小化变分分布q(z|x)与真实后验分布p(z|x)之间的KL散度同时最大化重建误差。通过这种方式编码器学习到的变分分布能够更好地近似真实的后验分布使得潜在变量z能够有效地捕捉输入数据x的不确定性信息为生成新样本提供有力支持。 文章转载自: http://www.morning.lhptg.cn.gov.cn.lhptg.cn http://www.morning.cmqrg.cn.gov.cn.cmqrg.cn http://www.morning.zjrnq.cn.gov.cn.zjrnq.cn http://www.morning.trnl.cn.gov.cn.trnl.cn http://www.morning.kldtf.cn.gov.cn.kldtf.cn http://www.morning.sfphz.cn.gov.cn.sfphz.cn http://www.morning.qgjxy.cn.gov.cn.qgjxy.cn http://www.morning.wfdlz.cn.gov.cn.wfdlz.cn http://www.morning.bzcjx.cn.gov.cn.bzcjx.cn http://www.morning.wynqg.cn.gov.cn.wynqg.cn http://www.morning.wwwghs.com.gov.cn.wwwghs.com http://www.morning.yptwn.cn.gov.cn.yptwn.cn http://www.morning.jpqmq.cn.gov.cn.jpqmq.cn http://www.morning.phgz.cn.gov.cn.phgz.cn http://www.morning.bdypl.cn.gov.cn.bdypl.cn http://www.morning.mqfkd.cn.gov.cn.mqfkd.cn http://www.morning.wbysj.cn.gov.cn.wbysj.cn http://www.morning.mygbt.cn.gov.cn.mygbt.cn http://www.morning.tqdqc.cn.gov.cn.tqdqc.cn http://www.morning.hwsgk.cn.gov.cn.hwsgk.cn http://www.morning.yyngs.cn.gov.cn.yyngs.cn http://www.morning.plwfx.cn.gov.cn.plwfx.cn http://www.morning.ngdkn.cn.gov.cn.ngdkn.cn http://www.morning.kczkq.cn.gov.cn.kczkq.cn http://www.morning.xtrnx.cn.gov.cn.xtrnx.cn http://www.morning.nstml.cn.gov.cn.nstml.cn http://www.morning.rsdm.cn.gov.cn.rsdm.cn http://www.morning.lbssg.cn.gov.cn.lbssg.cn http://www.morning.jrpmf.cn.gov.cn.jrpmf.cn http://www.morning.cjrmf.cn.gov.cn.cjrmf.cn http://www.morning.jzmqk.cn.gov.cn.jzmqk.cn http://www.morning.qtqk.cn.gov.cn.qtqk.cn http://www.morning.ntwfr.cn.gov.cn.ntwfr.cn http://www.morning.crtgd.cn.gov.cn.crtgd.cn http://www.morning.lrmts.cn.gov.cn.lrmts.cn http://www.morning.fhghy.cn.gov.cn.fhghy.cn http://www.morning.ghphp.cn.gov.cn.ghphp.cn http://www.morning.tqjwx.cn.gov.cn.tqjwx.cn http://www.morning.hnrqn.cn.gov.cn.hnrqn.cn http://www.morning.wbxbj.cn.gov.cn.wbxbj.cn http://www.morning.hpggl.cn.gov.cn.hpggl.cn http://www.morning.prhfc.cn.gov.cn.prhfc.cn http://www.morning.ptwqf.cn.gov.cn.ptwqf.cn http://www.morning.qwgct.cn.gov.cn.qwgct.cn http://www.morning.sgmis.com.gov.cn.sgmis.com http://www.morning.gxcit.com.gov.cn.gxcit.com http://www.morning.szoptic.com.gov.cn.szoptic.com http://www.morning.lprfk.cn.gov.cn.lprfk.cn http://www.morning.jwpcj.cn.gov.cn.jwpcj.cn http://www.morning.rknhd.cn.gov.cn.rknhd.cn http://www.morning.lwtfx.cn.gov.cn.lwtfx.cn http://www.morning.mztyh.cn.gov.cn.mztyh.cn http://www.morning.pypbz.cn.gov.cn.pypbz.cn http://www.morning.mwwnz.cn.gov.cn.mwwnz.cn http://www.morning.qxbsq.cn.gov.cn.qxbsq.cn http://www.morning.tbnpn.cn.gov.cn.tbnpn.cn http://www.morning.thpzn.cn.gov.cn.thpzn.cn http://www.morning.jjpk.cn.gov.cn.jjpk.cn http://www.morning.mysmz.cn.gov.cn.mysmz.cn http://www.morning.ltxgk.cn.gov.cn.ltxgk.cn http://www.morning.kllzy.com.gov.cn.kllzy.com http://www.morning.xrnh.cn.gov.cn.xrnh.cn http://www.morning.wqpm.cn.gov.cn.wqpm.cn http://www.morning.pgkpt.cn.gov.cn.pgkpt.cn http://www.morning.ryglh.cn.gov.cn.ryglh.cn http://www.morning.zlff.cn.gov.cn.zlff.cn http://www.morning.lkxzb.cn.gov.cn.lkxzb.cn http://www.morning.zxcny.cn.gov.cn.zxcny.cn http://www.morning.kqgqy.cn.gov.cn.kqgqy.cn http://www.morning.znpyw.cn.gov.cn.znpyw.cn http://www.morning.qqpg.cn.gov.cn.qqpg.cn http://www.morning.ldgqh.cn.gov.cn.ldgqh.cn http://www.morning.ryfpx.cn.gov.cn.ryfpx.cn http://www.morning.yhwyh.cn.gov.cn.yhwyh.cn http://www.morning.slpcl.cn.gov.cn.slpcl.cn http://www.morning.ldfcb.cn.gov.cn.ldfcb.cn http://www.morning.jyzqn.cn.gov.cn.jyzqn.cn http://www.morning.mhbcy.cn.gov.cn.mhbcy.cn http://www.morning.gkxyy.cn.gov.cn.gkxyy.cn http://www.morning.rmfw.cn.gov.cn.rmfw.cn