coinstac-dinunet
Distributed Neural Network implementation on COINSTAC.
pip install coinstac-dinunet
Specify supported packages like pytorch & torchvision in a requirements.txt file
Highlights:
1. Handles multi-network/complex training schemes.
2. Automatic data splitting/k-fold cross validation.
3. Automatic model checkpointing.
4. GPU enabled local sites.
5. Customizable metrics(w/Auto serialization between nodes) to work with any schemes.
6. We can integrate any custom reduction and learning mechanism by extending coinstac_dinunet.distrib.reducer/learner.
7. Realtime profiling each sites by specifying in compspec file(see dinune_fsv example below for details).
...
Working examples:
- FreeSurfer volumes classification.
- VBM 3D images classification.
Add a new NN computation to COINSTAC (Development guide):
imports
from coinstac_dinunet import COINNDataset, COINNTrainer, COINNLocal
from coinstac_dinunet.metrics import COINNAverages, Prf1a
1. Define Data Loader
class MyDataset(COINNDataset):
def __init__(self, **kw):
super().__init__(**kw)
self.labels = None
def load_index(self, id, file):
data_dir = self.path(id, 'data_dir')
...
self.indices.append([id, file])
def __getitem__(self, ix):
id, file = self.indices[ix]
data_dir = self.path(id, 'data_dir')
label_dir = self.path(id, 'label_dir')
...
...
return {'inputs':.., 'labels': ...}
2. Define Trainer
class MyTrainer(COINNTrainer):
def __init__(self, **kw):
super().__init__(**kw)
def _init_nn_model(self):
self.nn['model'] = MYModel(in_size=self.cache['input_size'], out_size=self.cache['num_class'])
def iteration(self, batch):
inputs, labels = batch['inputs'].to(self.device['gpu']).float(), batch['labels'].to(self.device['gpu']).long()
out = F.log_softmax(self.nn['model'](inputs), 1)
loss = F.nll_loss(out, labels)
_, predicted = torch.max(out, 1)
score = self.new_metrics()
score.add(predicted, labels)
val = self.new_averages()
val.add(loss.item(), len(inputs))
return {'out': out, 'loss': loss, 'averages': val,
'metrics': score, 'prediction': predicted}
3. Add entries to:
Advanced use cases: