项目文件夹

文件
wehub-resource-sync c8a779b1bb
Docker Image CI / build-ubuntu2004 (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:36:55 +08:00

129 行
4.9 KiB
Python

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
#
# SPDX-FileCopyrightText: Copyright (c) 1993-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Configure dependencies before any external imports
from demo_diffusion import deps
deps.configure("cosmos")
import argparse
from cuda.bindings import runtime as cudart
from demo_diffusion import dd_argparse
from demo_diffusion import pipeline as pipeline_module
def parseArgs():
parser = argparse.ArgumentParser(description="Options for Wan 2.2 Txt2Vid Demo", conflict_handler='resolve')
parser = dd_argparse.add_arguments(parser)
parser.add_argument('--version', type=str, default="wan2.2-t2v-a14b", help="Version of Wan")
parser.add_argument('--guidance-scale', type=float, default=4.0, help="Guidance scale for high-noise stage (Wan default: 4.0)")
parser.add_argument('--guidance-scale-2', type=float, default=3.0, help="Guidance scale for low-noise stage (Wan default: 3.0)")
parser.add_argument('--boundary-ratio', type=float, default=0.875, help="Boundary ratio for two-stage denoising (default: 0.875)")
parser.add_argument('--denoising-steps', type=int, default=40, help="Number of denoising steps (Wan default: 40)")
parser.add_argument('--num-warmup-runs', type=int, default=1, help="Number of warmup runs before benchmarking")
parser.add_argument(
'--negative-prompt',
nargs='*',
default= (
"vivid colors, overexposed, static, blurry details, subtitles, style, "
"work of art, painting, picture, still, overall grayish, worst quality, "
"low quality, JPEG artifacts, ugly, deformed, extra fingers, poorly drawn hands, "
"poorly drawn face, deformed, disfigured, deformed limbs, fused fingers, "
"static image, cluttered background, three legs, many people in the background, "
"walking backwards"
),
help="Negative prompt (Wan team default, English translation)"
)
parser.add_argument(
"--onnx-opset",
type=int,
default=23,
choices=range(7, 24),
help="Select ONNX opset version to target for exported models",
)
return parser.parse_args()
def process_demo_args(args):
args.height = 720
args.width = 1280
args.num_frames = 81
args.max_sequence_length = 512
# require static batch = 1
if args.batch_size > 1:
raise ValueError(f"Batch size {args.batch_size} is larger than allowed (max=1 for Wan).")
args.batch_size = 1
args.build_static_batch = True
args.build_dynamic_shape = False
print(f"[I] Building Wan 2.2 T2V with fixed resolution: {args.height}×{args.width}, {args.num_frames} frames")
negative_prompt = args.negative_prompt
if isinstance(negative_prompt, list):
negative_prompt = ' '.join(negative_prompt) if negative_prompt else ""
kwargs_run_demo = {
'prompt': args.prompt,
'height': args.height,
'width': args.width,
'num_frames': args.num_frames,
'batch_size': args.batch_size,
'batch_count': args.batch_count,
'num_warmup_runs': args.num_warmup_runs,
'use_cuda_graph': args.use_cuda_graph,
'negative_prompt': negative_prompt,
'num_inference_steps': args.denoising_steps,
}
return kwargs_run_demo
if __name__ == "__main__":
print("[I] Initializing Wan 2.2 txt2vid demo using TensorRT")
args = parseArgs()
kwargs_run_demo = process_demo_args(args)
_, kwargs_load_engine, _ = dd_argparse.process_pipeline_args(args)
# Initialize demo
demo = pipeline_module.WanPipeline.FromArgs(args, pipeline_type=pipeline_module.PIPELINE_TYPE.TXT2VID)
# Load TensorRT engines and pytorch modules
demo.load_engines(
framework_model_dir=args.framework_model_dir,
**kwargs_load_engine,
)
# In low-vram mode we allocate the required device memory individually before each model is run
if args.low_vram:
demo.device_memory_sizes = demo.get_device_memory_sizes()
else:
_, shared_device_memory = cudart.cudaMalloc(demo.calculate_max_device_memory())
demo.activate_engines(shared_device_memory)
# Load resources
demo.load_resources(args.height, args.width, args.batch_size, args.seed)
# Run inference
demo.run(**kwargs_run_demo)
demo.teardown()