Spaces:
				
			
			
	
			
			
		Running
		
			on 
			
			L40S
	
	
	
			
			
	
	
	
	
		
		
		Running
		
			on 
			
			L40S
	| # 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 sys | |
| import io | |
| import os | |
| import time | |
| import random | |
| import numpy as np | |
| import torch | |
| from torch.cuda.amp import autocast, GradScaler | |
| from functools import wraps | |
| from datetime import datetime | |
| import gc | |
| 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 | |
| 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 | |
| gc.collect() | |
| print(f"[{datetime.now()}][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()" | |
| xxx | |
| ''' | |
| def wrapper(*args, **kwargs): | |
| with autocast(): | |
| 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 | |
| def str_to_bool(s): | |
| if s.lower() in ['true', 't', 'yes', 'y', '1']: | |
| return True | |
| elif s.lower() in ['false', 'f', 'no', 'n', '0']: | |
| return False | |
| else: | |
| raise f"{s} not in ['true', 't', 'yes', 'y', '1', 'false', 'f', 'no', 'n', '0']" | |

