|
|
import json |
|
|
import math |
|
|
import random |
|
|
import torch |
|
|
|
|
|
|
|
|
|
|
|
def GetDevice(): |
|
|
return torch.device("cuda" if torch.cuda.is_available() else "cpu") |
|
|
|
|
|
|
|
|
def RandomCode(): |
|
|
code = ''; |
|
|
chars = '0123456789abcdef' |
|
|
count = 8; |
|
|
|
|
|
for i in range(0, count): |
|
|
code += chars[math.floor(random.randrange(len(chars)))] |
|
|
|
|
|
return code |
|
|
|
|
|
|
|
|
def RoundNumber(number): |
|
|
suffixes = ['', 'k', 'm', 'b'] |
|
|
|
|
|
if number < 1000: |
|
|
return str(number) |
|
|
|
|
|
magnitude = 0 |
|
|
while abs(number) >= 1000: |
|
|
magnitude += 1 |
|
|
number /= 1000.0 |
|
|
|
|
|
return '{:.0f}{}'.format(number, suffixes[magnitude]) |
|
|
|
|
|
|
|
|
def GetNumParams(model): |
|
|
size = sum(p.numel() for p in model.parameters()) |
|
|
rounded_size = RoundNumber(size) |
|
|
|
|
|
return size, rounded_size |
|
|
|
|
|
|
|
|
class Config: |
|
|
def __init__(self, data): |
|
|
for key, value in data.items(): |
|
|
if isinstance(value, dict): |
|
|
setattr(self, key, Config(value)) |
|
|
else: |
|
|
setattr(self, key, value) |
|
|
|
|
|
|
|
|
class ConfigParser: |
|
|
def __init__(self, path: str): |
|
|
with open(path, 'r') as f: |
|
|
json_dict = json.load(f) |
|
|
|
|
|
|
|
|
config = Config(json_dict) |
|
|
|
|
|
self.config = config |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|