use of org.nd4j.parameterserver.distributed.logic.ClientRouter in project nd4j by deeplearning4j.
the class VoidParameterServerStressTest method testPerformanceUnicast1.
/**
* This is one of the MOST IMPORTANT tests
*/
@Test
public void testPerformanceUnicast1() {
List<String> list = new ArrayList<>();
for (int t = 0; t < 1; t++) {
list.add("127.0.0.1:3838" + t);
}
VoidConfiguration voidConfiguration = VoidConfiguration.builder().unicastPort(49823).numberOfShards(list.size()).shardAddresses(list).build();
VoidParameterServer[] shards = new VoidParameterServer[list.size()];
for (int t = 0; t < shards.length; t++) {
shards[t] = new VoidParameterServer(NodeRole.SHARD);
Transport transport = new RoutedTransport();
transport.setIpAndPort("127.0.0.1", Integer.valueOf("3838" + t));
shards[t].setShardIndex((short) t);
shards[t].init(voidConfiguration, transport, new SkipGramTrainer());
assertEquals(NodeRole.SHARD, shards[t].getNodeRole());
}
VoidParameterServer clientNode = new VoidParameterServer(NodeRole.CLIENT);
RoutedTransport transport = new RoutedTransport();
ClientRouter router = new InterleavedRouter(0);
transport.setRouter(router);
transport.setIpAndPort("127.0.0.1", voidConfiguration.getUnicastPort());
router.init(voidConfiguration, transport);
clientNode.init(voidConfiguration, transport, new SkipGramTrainer());
assertEquals(NodeRole.CLIENT, clientNode.getNodeRole());
final List<Long> times = new CopyOnWriteArrayList<>();
// at this point, everything should be started, time for tests
clientNode.initializeSeqVec(100, NUM_WORDS, 123, 25, true, false);
log.info("Initialization finished, going to tests...");
Thread[] threads = new Thread[4];
for (int t = 0; t < threads.length; t++) {
final int e = t;
threads[t] = new Thread(() -> {
List<Long> results = new ArrayList<>();
int chunk = NUM_WORDS / threads.length;
int start = e * chunk;
int end = (e + 1) * chunk;
for (int i = 0; i < 200; i++) {
long time1 = System.nanoTime();
INDArray array = clientNode.getVector(RandomUtils.nextInt(start, end));
long time2 = System.nanoTime();
results.add(time2 - time1);
if ((i + 1) % 100 == 0)
log.info("Thread {} cnt {}", e, i + 1);
}
times.addAll(results);
});
threads[t].setDaemon(true);
threads[t].start();
}
for (int t = 0; t < threads.length; t++) {
try {
threads[t].join();
} catch (Exception e) {
}
}
List<Long> newTimes = new ArrayList<>(times);
Collections.sort(newTimes);
log.info("p50: {} us", newTimes.get(newTimes.size() / 2) / 1000);
// shutdown everything
for (VoidParameterServer shard : shards) {
shard.getTransport().shutdown();
}
clientNode.getTransport().shutdown();
}
use of org.nd4j.parameterserver.distributed.logic.ClientRouter in project nd4j by deeplearning4j.
the class RoutedTransportTest method testMessaging1.
/**
* This test
*
* @throws Exception
*/
@Test
public void testMessaging1() throws Exception {
List<String> list = new ArrayList<>();
for (int t = 0; t < 5; t++) {
list.add("127.0.0.1:3838" + t);
}
VoidConfiguration voidConfiguration = // this port will be used only by client
VoidConfiguration.builder().shardAddresses(list).unicastPort(43120).build();
// first of all we start shards
RoutedTransport[] transports = new RoutedTransport[list.size()];
for (int t = 0; t < transports.length; t++) {
Clipboard clipboard = new Clipboard();
transports[t] = new RoutedTransport();
transports[t].setIpAndPort("127.0.0.1", Integer.valueOf("3838" + t));
transports[t].init(voidConfiguration, clipboard, NodeRole.SHARD, "127.0.0.1", voidConfiguration.getUnicastPort(), (short) t);
}
for (int t = 0; t < transports.length; t++) {
transports[t].launch(Transport.ThreadingModel.DEDICATED_THREADS);
}
// now we start client, for this test we'll have only one client
Clipboard clipboard = new Clipboard();
RoutedTransport clientTransport = new RoutedTransport();
clientTransport.setIpAndPort("127.0.0.1", voidConfiguration.getUnicastPort());
// setRouter call should be called before init, and we need
ClientRouter router = new InterleavedRouter(0);
clientTransport.setRouter(router);
router.init(voidConfiguration, clientTransport);
clientTransport.init(voidConfiguration, clipboard, NodeRole.CLIENT, "127.0.0.1", voidConfiguration.getUnicastPort(), (short) -1);
clientTransport.launch(Transport.ThreadingModel.DEDICATED_THREADS);
// we send message somewhere
VoidMessage message = new IntroductionRequestMessage("127.0.0.1", voidConfiguration.getUnicastPort());
clientTransport.sendMessage(message);
Thread.sleep(500);
message = transports[0].messages.poll(1, TimeUnit.SECONDS);
assertNotEquals(null, message);
for (int t = 1; t < transports.length; t++) {
message = transports[t].messages.poll(1, TimeUnit.SECONDS);
assertEquals(null, message);
}
/**
* This is very important part, shutting down all transports
*/
for (RoutedTransport transport : transports) {
transport.shutdown();
}
clientTransport.shutdown();
}
use of org.nd4j.parameterserver.distributed.logic.ClientRouter in project nd4j by deeplearning4j.
the class VoidParameterServerStressTest method testPerformanceUnicast2.
/**
* This is second super-important test for unicast transport.
* Here we send non-blocking messages
*/
@Test
@Ignore
public void testPerformanceUnicast2() {
List<String> list = new ArrayList<>();
for (int t = 0; t < 5; t++) {
list.add("127.0.0.1:3838" + t);
}
VoidConfiguration voidConfiguration = VoidConfiguration.builder().unicastPort(49823).numberOfShards(list.size()).shardAddresses(list).build();
VoidParameterServer[] shards = new VoidParameterServer[list.size()];
for (int t = 0; t < shards.length; t++) {
shards[t] = new VoidParameterServer(NodeRole.SHARD);
Transport transport = new RoutedTransport();
transport.setIpAndPort("127.0.0.1", Integer.valueOf("3838" + t));
shards[t].setShardIndex((short) t);
shards[t].init(voidConfiguration, transport, new SkipGramTrainer());
assertEquals(NodeRole.SHARD, shards[t].getNodeRole());
}
VoidParameterServer clientNode = new VoidParameterServer();
RoutedTransport transport = new RoutedTransport();
ClientRouter router = new InterleavedRouter(0);
transport.setRouter(router);
transport.setIpAndPort("127.0.0.1", voidConfiguration.getUnicastPort());
router.init(voidConfiguration, transport);
clientNode.init(voidConfiguration, transport, new SkipGramTrainer());
assertEquals(NodeRole.CLIENT, clientNode.getNodeRole());
final List<Long> times = new CopyOnWriteArrayList<>();
// at this point, everything should be started, time for tests
clientNode.initializeSeqVec(100, NUM_WORDS, 123, 25, true, false);
log.info("Initialization finished, going to tests...");
Thread[] threads = new Thread[4];
for (int t = 0; t < threads.length; t++) {
final int e = t;
threads[t] = new Thread(() -> {
List<Long> results = new ArrayList<>();
int chunk = NUM_WORDS / threads.length;
int start = e * chunk;
int end = (e + 1) * chunk;
for (int i = 0; i < 200; i++) {
Frame<SkipGramRequestMessage> frame = new Frame<>(BasicSequenceProvider.getInstance().getNextValue());
for (int f = 0; f < 128; f++) {
frame.stackMessage(getSGRM());
}
long time1 = System.nanoTime();
clientNode.execDistributed(frame);
long time2 = System.nanoTime();
results.add(time2 - time1);
if ((i + 1) % 100 == 0)
log.info("Thread {} cnt {}", e, i + 1);
}
times.addAll(results);
});
threads[t].setDaemon(true);
threads[t].start();
}
for (int t = 0; t < threads.length; t++) {
try {
threads[t].join();
} catch (Exception e) {
}
}
List<Long> newTimes = new ArrayList<>(times);
Collections.sort(newTimes);
log.info("p50: {} us", newTimes.get(newTimes.size() / 2) / 1000);
// shutdown everything
for (VoidParameterServer shard : shards) {
shard.getTransport().shutdown();
}
clientNode.getTransport().shutdown();
}
Aggregations