def main(): # launch grid print "launching grid" grid = launch_grid() #publish the shared object print "publishing sfo" sfo = sf.sfo() sfo_id = grid.publish(sfo) print "communication test" #get a worker to do a task #proxy = grid.acquire_service(sfo_id) #print proxy.hello().get() #grid.release_service(proxy) print "broadcast test" print grid.gather(grid.broadcast(sfo_id, 'hello')) #call init on all nodes print "initializing model" mkdir_p(tmpdir) mkdir_p(outfolder) requests = grid.broadcast(sfo_id, 'init_model', tmpdir, sequence, initpdb, restraints) #wait til init is done results = grid.gather(requests) #turn off verbose noise (works because IMP.base.NONE is picklable, being an int. grid.gather(grid.broadcast(sfo_id, 'set_checklevel', IMP.base.NONE)) grid.gather(grid.broadcast(sfo_id, 'set_loglevel', IMP.base.NONE)) # evaluate the score of the whole system (without derivatives, False flag) print "initial energy" grid.gather(grid.broadcast(sfo_id, 'm', 'evaluate', False)) #berendsen 300K tau=0.5ps #perform two independent MC moves for sigma and gamma print "initializing simulation and statistics" grid.gather(grid.scatter(sfo_id, 'init_simulation', zip(lambdas, tau))) grid.gather(grid.scatter(sfo_id, 'init_stats', zip(nums, stat_rate))) replica = ReplicaTracker(nreps, lambdas, grid, sfo_id, rexlog=rexlog, scheme=rex_scheme, xchg=rex_xchg, tune_temps=tune_temps, tune_data=tune_data, templog=templog) print "thermalization" for i in range(n_therm): print "\rgibbs step %d" % i, sys.stdout.flush() grid.gather(grid.scatter(sfo_id, 'set_inv_temp', [ n_therm/float(i+1) * l for l in lambdas ])) grid.gather(grid.broadcast(sfo_id, 'do_md', n_hmc_therm)) grid.gather(grid.broadcast(sfo_id, 'write_stats')) print "start gibbs sampling loop: first relaxation" for i in range(n_gibbs1): print "\rgibbs step %d" % i, sys.stdout.flush() #print " md" grid.gather(grid.broadcast(sfo_id, 'do_md', n_md)) #print " mc" grid.gather(grid.broadcast(sfo_id, 'do_mc', n_mc)) grid.gather(grid.broadcast(sfo_id, 'write_stats')) #print " swaps" replica.tune_data['dumb_scale']=0.5 replica.replica_exchange() #print " stats" replica.write_rex_stats() print "start gibbs sampling loop: second relaxation" for i in range(n_gibbs2): print "\rgibbs step %d" % i, sys.stdout.flush() #print " md" grid.gather(grid.broadcast(sfo_id, 'do_md', n_md)) #print " mc" grid.gather(grid.broadcast(sfo_id, 'do_mc', n_mc)) grid.gather(grid.broadcast(sfo_id, 'write_stats')) #print " swaps" replica.tune_data['dumb_scale']=0.2 replica.replica_exchange() #print " stats" replica.write_rex_stats() print "start gibbs sampling loop: production" for i in range(n_gibbs3): print "\rgibbs step %d" % i, sys.stdout.flush() #print " md" grid.gather(grid.broadcast(sfo_id, 'do_md', n_md)) #print " mc" grid.gather(grid.broadcast(sfo_id, 'do_mc', n_mc)) grid.gather(grid.broadcast(sfo_id, 'write_stats')) #print " swaps" replica.tune_temps=False replica.replica_exchange() #print " stats" replica.write_rex_stats() print "terminating grid" grid.terminate() print "done."
def main(): # launch grid print("launching grid") grid = launch_grid() # publish the shared object print("publishing sfo") sfo = sf.sfo() sfo_id = grid.publish(sfo) print("communication test") # get a worker to do a task #proxy = grid.acquire_service(sfo_id) # print proxy.hello().get() # grid.release_service(proxy) print("broadcast test") print(grid.gather(grid.broadcast(sfo_id, 'hello'))) # call init on all nodes print("initializing model") mkdir_p(tmpdir) mkdir_p(outfolder) requests = grid.broadcast(sfo_id, 'init_model', tmpdir, sequence, initpdb, restraints) # wait til init is done results = grid.gather(requests) # turn off verbose noise (works because IMP.base.NONE is picklable, being # an int. grid.gather(grid.broadcast(sfo_id, 'set_checklevel', IMP.base.NONE)) grid.gather(grid.broadcast(sfo_id, 'set_loglevel', IMP.base.NONE)) # evaluate the score of the whole system (without derivatives, False flag) print("initial energy") grid.gather(grid.broadcast(sfo_id, 'm', 'evaluate', False)) # berendsen 300K tau=0.5ps # perform two independent MC moves for sigma and gamma print("initializing simulation and statistics") grid.gather(grid.scatter(sfo_id, 'init_simulation', zip(lambdas, tau))) grid.gather(grid.scatter(sfo_id, 'init_stats', zip(nums, stat_rate))) replica = ReplicaTracker(nreps, lambdas, grid, sfo_id, rexlog=rexlog, scheme=rex_scheme, xchg=rex_xchg, tune_temps=tune_temps, tune_data=tune_data, templog=templog) print("thermalization") for i in range(n_therm): print("\rgibbs step %d" % i, end=' ') sys.stdout.flush() grid.gather( grid.scatter(sfo_id, 'set_inv_temp', [n_therm / float(i + 1) * l for l in lambdas])) grid.gather(grid.broadcast(sfo_id, 'do_md', n_hmc_therm)) grid.gather(grid.broadcast(sfo_id, 'write_stats')) print("start gibbs sampling loop: first relaxation") for i in range(n_gibbs1): print("\rgibbs step %d" % i, end=' ') sys.stdout.flush() # print " md" grid.gather(grid.broadcast(sfo_id, 'do_md', n_md)) # print " mc" grid.gather(grid.broadcast(sfo_id, 'do_mc', n_mc)) grid.gather(grid.broadcast(sfo_id, 'write_stats')) # print " swaps" replica.tune_data['dumb_scale'] = 0.5 replica.replica_exchange() # print " stats" replica.write_rex_stats() print("start gibbs sampling loop: second relaxation") for i in range(n_gibbs2): print("\rgibbs step %d" % i, end=' ') sys.stdout.flush() # print " md" grid.gather(grid.broadcast(sfo_id, 'do_md', n_md)) # print " mc" grid.gather(grid.broadcast(sfo_id, 'do_mc', n_mc)) grid.gather(grid.broadcast(sfo_id, 'write_stats')) # print " swaps" replica.tune_data['dumb_scale'] = 0.2 replica.replica_exchange() # print " stats" replica.write_rex_stats() print("start gibbs sampling loop: production") for i in range(n_gibbs3): print("\rgibbs step %d" % i, end=' ') sys.stdout.flush() # print " md" grid.gather(grid.broadcast(sfo_id, 'do_md', n_md)) # print " mc" grid.gather(grid.broadcast(sfo_id, 'do_mc', n_mc)) grid.gather(grid.broadcast(sfo_id, 'write_stats')) # print " swaps" replica.tune_temps = False replica.replica_exchange() # print " stats" replica.write_rex_stats() print("terminating grid") grid.terminate() print("done.")