# Open Source Model Licensed under the Apache License Version 2.0 and Other Licenses of the Third-Party Components therein: # The below Model in this distribution may have been modified by THL A29 Limited ("Tencent Modifications"). All Tencent Modifications are Copyright (C) 2024 THL A29 Limited. # Copyright (C) 2024 THL A29 Limited, a Tencent company. All rights reserved. # The below software and/or models in this distribution may have been # modified by THL A29 Limited ("Tencent Modifications"). # All Tencent Modifications are Copyright (C) THL A29 Limited. # Hunyuan 3D is licensed under the TENCENT HUNYUAN NON-COMMERCIAL LICENSE AGREEMENT # except for the third-party components listed below. # Hunyuan 3D does not impose any additional limitations beyond what is outlined # in the repsective licenses of these third-party components. # Users must comply with all terms and conditions of original licenses of these third-party # components and must ensure that the usage of the third party components adheres to # all relevant laws and regulations. # For avoidance of doubts, Hunyuan 3D means the large language models and # their software and algorithms, including trained model weights, parameters (including # optimizer states), machine-learning model code, inference-enabling code, training-enabling code, # fine-tuning enabling code and other elements of the foregoing made publicly available # by Tencent in accordance with TENCENT HUNYUAN COMMUNITY LICENSE AGREEMENT. import os import time import random import numpy as np import torch from functools import wraps def seed_everything(seed): ''' seed everthing ''' random.seed(seed) np.random.seed(seed) torch.manual_seed(seed) os.environ["PL_GLOBAL_SEED"] = str(seed) def timing_decorator(category: str): ''' timing_decorator: record time ''' def decorator(func): func.call_count = 0 @wraps(func) def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() elapsed_time = end_time - start_time func.call_count += 1 print(f"[HunYuan3D]-[{category}], cost time: {elapsed_time:.4f}s") # huiwen return result return wrapper return decorator def auto_amp_inference(func): ''' with torch.cuda.amp.autocast()" # deprecated. xxx ''' @wraps(func) def wrapper(*args, **kwargs): with torch.amp.autocast('cuda'): output = func(*args, **kwargs) return output return wrapper def get_parameter_number(model): total_num = sum(p.numel() for p in model.parameters()) trainable_num = sum(p.numel() for p in model.parameters() if p.requires_grad) return {'Total': total_num, 'Trainable': trainable_num} def set_parameter_grad_false(model): for p in model.parameters(): p.requires_grad = False