12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- """Various utilities."""
- import os
- import csv
- import torch
- import random
- import numpy as np
- import socket
- import datetime
- def system_startup(args=None, defs=None):
- """Print useful system information."""
- # Choose GPU device and print status information:
- device = torch.device('cuda:0') if torch.cuda.is_available() else torch.device('cpu')
- setup = dict(device=device, dtype=torch.float) # non_blocking=NON_BLOCKING
- print('Currently evaluating -------------------------------:')
- print(datetime.datetime.now().strftime("%A, %d. %B %Y %I:%M%p"))
- print(f'CPUs: {torch.get_num_threads()}, GPUs: {torch.cuda.device_count()} on {socket.gethostname()}.')
- if args is not None:
- print(args)
- if defs is not None:
- print(repr(defs))
- if torch.cuda.is_available():
- print(f'GPU : {torch.cuda.get_device_name(device=device)}')
- return setup
- def save_to_table(out_dir, name, dryrun, **kwargs):
- """Save keys to .csv files. Function adapted from Micah."""
- # Check for file
- if not os.path.isdir(out_dir):
- os.makedirs(out_dir)
- fname = os.path.join(out_dir, f'table_{name}.csv')
- fieldnames = list(kwargs.keys())
- # Read or write header
- try:
- with open(fname, 'r') as f:
- reader = csv.reader(f, delimiter='\t')
- header = [line for line in reader][0]
- except Exception as e:
- print('Creating a new .csv table...')
- with open(fname, 'w') as f:
- writer = csv.DictWriter(f, delimiter='\t', fieldnames=fieldnames)
- writer.writeheader()
- if not dryrun:
- # Add row for this experiment
- with open(fname, 'a') as f:
- writer = csv.DictWriter(f, delimiter='\t', fieldnames=fieldnames)
- writer.writerow(kwargs)
- print('\nResults saved to ' + fname + '.')
- else:
- print(f'Would save results to {fname}.')
- print(f'Would save these keys: {fieldnames}.')
- def set_random_seed(seed=233):
- """233 = 144 + 89 is my favorite number."""
- torch.manual_seed(seed + 1)
- torch.cuda.manual_seed(seed + 2)
- torch.cuda.manual_seed_all(seed + 3)
- np.random.seed(seed + 4)
- torch.cuda.manual_seed_all(seed + 5)
- random.seed(seed + 6)
- def set_deterministic():
- """Switch pytorch into a deterministic computation mode."""
- torch.backends.cudnn.deterministic = True
- torch.backends.cudnn.benchmark = False
|