@@ -262,16 +262,16 @@ handle_cast({clientAck,Body}, State = #main_genserver_state{clientsWaitingList =
262
262
ClientName = binary_to_term (Body ),
263
263
NewWaitingList = WaitingList -- [ClientName ], % waitingList is initialized in clientsTraining or clientsPredict handl cast calls
264
264
if length (NewWaitingList ) == 0 ->
265
- ResultsToSendStr = generate_phase_result_data_to_send_from_ets_as_str (),
266
- NothingToSend = string :is_empty (ResultsToSendStr ),
265
+ PhaseResultsDataMap = generate_phase_result_data_map (),
266
+ NothingToSend = string :is_empty (PhaseResultsDataMap ),
267
267
if
268
268
NothingToSend -> pass ;
269
269
true -> Action = case get (active_phase ) of
270
270
training -> trainRes ;
271
271
prediction -> predRes
272
272
end ,
273
273
{RouterHost ,RouterPort } = ets :lookup_element (get (main_server_ets ), my_router , ? DATA_IDX ), % get main_server's router
274
- nerl_tools :http_router_request (RouterHost , RouterPort , [? API_SERVER_ATOM ], atom_to_list (Action ), ResultsToSendStr ),
274
+ nerl_tools :http_router_request (RouterHost , RouterPort , [? API_SERVER_ATOM ], atom_to_list (Action ), { json , PhaseResultsDataMap } ),
275
275
stats :increment_messages_sent (StatsEts ),
276
276
clean_phase_result_data_to_send_ets () % getting ready for next phase after data was sent to APIServer
277
277
end ,
@@ -324,11 +324,12 @@ handle_cast({lossFunction,Body}, State = #main_genserver_state{myName = MyName})
324
324
stats :increment_messages_received (StatsEts ),
325
325
try
326
326
case binary_to_term (Body ) of
327
- {WorkerName , SourceName , {LossTensor , _Type } , TimeNIF , BatchID , BatchTS } ->
328
- ToSend = ? PHASE_RES_DATA_SEPARATOR ++ atom_to_list (WorkerName ) ++ ? PHASE_RES_WORKER_NAME_SEPERATOR ++ atom_to_list (SourceName ) ++
329
- ? PHASE_RES_VALUES_SEPERATOR ++ nerl_tools :string_format (" ~p " ,[LossTensor ]) ++ ? PHASE_RES_VALUES_SEPERATOR ++ float_to_list (TimeNIF ) ++
330
- ? PHASE_RES_VALUES_SEPERATOR ++ integer_to_list (BatchID ) ++ ? PHASE_RES_VALUES_SEPERATOR ++ integer_to_list (BatchTS ) ++ ? PHASE_RES_DATA_SEPARATOR ,
331
- store_phase_result_data_to_send_ets ({WorkerName , BatchID , BatchTS }, ToSend );
327
+ {WorkerName , SourceName , {LossNerlTensor , LossNerlTensorType } , TimeNIF , BatchID , BatchTS } ->
328
+ Key = atom_to_list (WorkerName ) ++ ? PHASE_RES_VALUES_IN_KEY_SEPARATOR ++ atom_to_list (SourceName ) ++
329
+ ? PHASE_RES_VALUES_IN_KEY_SEPARATOR ++ integer_to_list (BatchID ) ++ ? PHASE_RES_VALUES_IN_KEY_SEPARATOR ++
330
+ integer_to_list (BatchTS ) ++ ? PHASE_RES_VALUES_IN_KEY_SEPARATOR ++ float_to_list (TimeNIF ) ++ ? PHASE_RES_VALUES_IN_KEY_SEPARATOR ++
331
+ atom_to_list (LossNerlTensorType ),
332
+ store_phase_result_data_to_send_ets (Key , binary_to_list (LossNerlTensor ));
332
333
_ELSE ->
333
334
? LOG_ERROR (" ~p Wrong loss function pattern received from client and its worker ~p " , [MyName , Body ])
334
335
end
@@ -344,18 +345,12 @@ handle_cast({predictRes,Body}, State) ->
344
345
_BatchSize = ets :lookup_element (get (main_server_ets ), batch_size , ? DATA_IDX ),
345
346
stats :increment_messages_received (StatsEts ),
346
347
try
347
- {WorkerName , SourceName , BatchID , {NerlTensor , Type }, TimeNIF , BatchTS } = binary_to_term (Body ), % % TODO: add convention with client
348
- % io:format("WorkerName: ~p, InputName: ~p, BatchID: ~p, Type: ~p~n",[WorkerName, InputName, BatchID, Type]),
349
- {DecodedNerlTensor , _Type } =
350
- if
351
- (NerlTensor == <<>>) -> ? LOG_ERROR (? LOG_HEADER ++ " Got empty tensor" ), empty_nerltensor_err ;
352
- true -> nerlNIF :nerltensor_conversion ({NerlTensor , Type }, nerlNIF :erl_type_conversion (Type )) % converting nerltensor from binary to erlang type using NerlNIF
353
- end ,
354
- ToSend = ? PHASE_RES_DATA_SEPARATOR ++ WorkerName ++ ? PHASE_RES_WORKER_NAME_SEPERATOR ++ atom_to_list (SourceName ) ++
355
- ? PHASE_RES_VALUES_SEPERATOR ++ nerl_tools :string_format (" ~p " ,[DecodedNerlTensor ]) ++ ? PHASE_RES_VALUES_SEPERATOR ++
356
- integer_to_list (TimeNIF ) ++ ? PHASE_RES_VALUES_SEPERATOR ++ integer_to_list (BatchID ) ++ ? PHASE_RES_VALUES_SEPERATOR ++
357
- integer_to_list (BatchTS ) ++ ? PHASE_RES_DATA_SEPARATOR ,
358
- store_phase_result_data_to_send_ets ({WorkerName , BatchID , BatchTS }, ToSend )
348
+ {WorkerName , SourceName , {NerlTensor , NerlTensorType }, TimeNIF , BatchID , BatchTS } = binary_to_term (Body ),
349
+ Key = atom_to_list (WorkerName ) ++ ? PHASE_RES_VALUES_IN_KEY_SEPARATOR ++ atom_to_list (SourceName ) ++
350
+ ? PHASE_RES_VALUES_IN_KEY_SEPARATOR ++ integer_to_list (BatchID ) ++ ? PHASE_RES_VALUES_IN_KEY_SEPARATOR ++
351
+ integer_to_list (BatchTS ) ++ ? PHASE_RES_VALUES_IN_KEY_SEPARATOR ++ float_to_list (TimeNIF ) ++ ? PHASE_RES_VALUES_IN_KEY_SEPARATOR ++
352
+ atom_to_list (NerlTensorType ),
353
+ store_phase_result_data_to_send_ets (Key , binary_to_list (NerlTensor ))
359
354
catch Err :E ->
360
355
? LOG_ERROR (? LOG_HEADER ++ " Error receiving predict result ~p " ,[{Err ,E }])
361
356
end ,
@@ -471,19 +466,14 @@ retransmission_to_apiserver(HttpRouterRequestFunc, Trials) ->
471
466
end .
472
467
473
468
474
- store_phase_result_data_to_send_ets ({WorkerName , BatchID , BatchTS }, DataToSendStr ) ->
475
- Key = {WorkerName , BatchID , BatchTS },
476
- ets :insert (get (phase_res_data_ets ),{Key , DataToSendStr }).
477
-
469
+ store_phase_result_data_to_send_ets (Key , NerlTensorData ) ->
470
+ KeyBin = list_to_binary (Key ),
471
+ ets :insert (get (phase_res_data_ets ),{KeyBin , NerlTensorData }).
478
472
479
- generate_phase_result_data_string_from_list ([], _ResString ) -> _ResString ;
480
- generate_phase_result_data_string_from_list (ListOfData , ResString ) ->
481
- NewResString = ResString ++ element (? DATA_IDX ,hd (ListOfData )),
482
- generate_phase_result_data_string_from_list (tl (ListOfData ), NewResString ).
483
473
484
- generate_phase_result_data_to_send_from_ets_as_str () ->
474
+ generate_phase_result_data_map () ->
485
475
ListOfData = ets :tab2list (get (phase_res_data_ets )),
486
- generate_phase_result_data_string_from_list ( ListOfData , " " ). % String to send is retruned
476
+ ListOfData .
487
477
488
478
clean_phase_result_data_to_send_ets () ->
489
479
ets :delete_all_objects (get (phase_res_data_ets )).
0 commit comments