"attempt to get argmax of an empty sequence" when performing energy probe

Hi,

As per this previous question, I’m running SLURM=1 PARTITION=nahuku32 BOARD=ncl-ext-ghrd-01 python -m test.py. I am using the fix-memory-leak branch of Nengo Loihi., which has support for NxSDK 1.0.0 Below is the slightly modified script:

import nengo
import nengo_loihi
from nxsdk.graph.monitor.probes import PerformanceProbeCondition
from nxsdk.api.enums.api_enums import ProbeParameter

network = nengo.Network( )
with network:
    oscillator = nengo.Ensemble(100, dimensions=1, )
    oscillator_probe_list = nengo.Probe(oscillator.neurons, synapse = None)

sim =  nengo_loihi.Simulator(network, precompute=True, dt=0.001)
sim.sims["loihi"].connect()

board = sim.sims["loihi"].nxsdk_board
probe_cond = PerformanceProbeCondition(tStart=1, tEnd=1000, bufferSize=100, binSize=4)
e_probe = board.probe(ProbeParameter.ENERGY, probe_cond)
t_probe = board.probe(ProbeParameter.EXECUTION_TIME, probe_cond)

sim.run_steps(1000)

print('Total Time: (in s): ', t_probe.totalHostTime/1.0e6)
print('Total Energy: (in J)', e_probe.totalEnergy/1.0e6)
print('Total Power (in W): ', e_probe.totalEnergy / t_probe.totalHostTime, '\n')

sim.sims["loihi"].close()

And this is my stack trace:

(SB3) kshivvy20@ncl-edu:~/noel_code_exact/_core$ SLURM=1 PARTITION=nahuku32 BOARD=ncl-ext-ghrd-01 python -m test.py 
/homes/kshivvy20/nengo-loihi/nengo_loihi/builder/ensemble.py:154: UserWarning: NengoLoihi does not support initial values for 'voltage' being non-zero on LIF neurons. On the chip, all values will be initialized to zero.
  warnings.warn(
INFO:DRV:  SLURM is being run in background
INFO:DRV:  Connecting to 10.212.98.104:36175
INFO:DRV:      Host server up..............Done 0.18s
INFO:DRV:      Encoding axons/synapses.....Done 2.53ms
INFO:DRV:      Compiling Embedded snips....Done 0.29s
INFO:DRV:      Compiling MPDS Registers....Done 0.05ms
INFO:HST:  Args chip=0 cpu=0 /homes/kshivvy20/anaconda3/envs/SB3/lib/python3.9/site-packages/nxsdk/driver/compilers/../../../temp/1637468607.331579/launcher_chip0_lmt0.bin --chips=1 --remote-relay=0 
INFO:HST:  Nx...
INFO:DRV:      Booting up..................Done 0.77s
INFO:DRV:      Encoding probes.............Done 0.16ms
INFO:DRV:      Transferring probes.........Done 7.46ms
INFO:DRV:      Configuring registers.......Done 7.29ms
INFO:DRV:      Transferring spikes.........Done 1.35ms
INFO:DRV:      Executing...................Done 0.71s
INFO:DRV:      Processing timeseries.......Error 0.05s
INFO:DRV:  Executor: 1000 timesteps........Error 0.78s
Traceback (most recent call last):
  File "/homes/kshivvy20/anaconda3/envs/SB3/lib/python3.9/runpy.py", line 188, in _run_module_as_main
    mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
  File "/homes/kshivvy20/anaconda3/envs/SB3/lib/python3.9/runpy.py", line 111, in _get_module_details
    __import__(pkg_name)
  File "/homes/kshivvy20/noel_code_exact/_core/test.py", line 19, in <module>
    sim.run_steps(1000)
  File "/homes/kshivvy20/nengo-loihi/nengo_loihi/simulator.py", line 345, in run_steps
    self._runner.run_steps(steps)
  File "/homes/kshivvy20/nengo-loihi/nengo_loihi/simulator.py", line 523, in loihi_only
    self.loihi.run_steps(steps)
  File "/homes/kshivvy20/nengo-loihi/nengo_loihi/hardware/interface.py", line 253, in run_steps
    d_get(self.nxsdk_board, b"cnVu")(steps, **{d(b"YVN5bmM="): not blocking})
  File "/homes/kshivvy20/anaconda3/envs/SB3/lib/python3.9/site-packages/nxsdk/arch/base/nxboard.py", line 283, in run
    self._run(
  File "/homes/kshivvy20/anaconda3/envs/SB3/lib/python3.9/site-packages/nxsdk/arch/base/nxboard.py", line 257, in _run
    self.executor.start(numSteps, aSync)
  File "/homes/kshivvy20/anaconda3/envs/SB3/lib/python3.9/site-packages/nxsdk/driver/executor.py", line 84, in start
    self.finish()
  File "/homes/kshivvy20/anaconda3/envs/SB3/lib/python3.9/site-packages/nxsdk/driver/executor.py", line 122, in finish
    self._notifyListeners(ExecutionEventEnum.POST_EXECUTION)
  File "/homes/kshivvy20/anaconda3/envs/SB3/lib/python3.9/site-packages/nxsdk/driver/executor.py", line 157, in _notifyListeners
    listener.postExecution()
  File "/homes/kshivvy20/anaconda3/envs/SB3/lib/python3.9/site-packages/nxsdk/driver/listeners/composite_monitor.py", line 56, in postExecution
    [m.postExecution() for m in self._collection.values()]
  File "/homes/kshivvy20/anaconda3/envs/SB3/lib/python3.9/site-packages/nxsdk/driver/listeners/composite_monitor.py", line 56, in <listcomp>
    [m.postExecution() for m in self._collection.values()]
  File "/homes/kshivvy20/anaconda3/envs/SB3/lib/python3.9/site-packages/nxsdk/driver/listeners/monitors/performance_monitor.py", line 44, in postExecution
    self._energyTimeMonitor.updateProbes()
  File "/homes/kshivvy20/anaconda3/envs/SB3/lib/python3.9/site-packages/nxsdk/graph/nxenergy_time.py", line 934, in updateProbes
    prb._updateProbe(probeData)
  File "/homes/kshivvy20/anaconda3/envs/SB3/lib/python3.9/site-packages/nxsdk/graph/nxenergy_time.py", line 385, in _updateProbe
    tProbeData = super()._updateProbe(rawTimeProbeData)
  File "/homes/kshivvy20/anaconda3/envs/SB3/lib/python3.9/site-packages/nxsdk/graph/nxenergy_time.py", line 54, in _updateProbe
    pdata = TimeProbeDataPerRun(runId=self.numRuns, data=data,
  File "/homes/kshivvy20/anaconda3/envs/SB3/lib/python3.9/site-packages/nxsdk/graph/nxtime.py", line 34, in __init__
    self._postProcessData(data)
  File "/homes/kshivvy20/anaconda3/envs/SB3/lib/python3.9/site-packages/nxsdk/graph/nxtime.py", line 59, in _postProcessData
    if self.phaseTimes[np.argmax(self.phaseTimes)] == 0xFFFFFFFF:
  File "<__array_function__ internals>", line 5, in argmax
  File "/homes/kshivvy20/anaconda3/envs/SB3/lib/python3.9/site-packages/numpy/core/fromnumeric.py", line 1195, in argmax
    return _wrapfunc(a, 'argmax', axis=axis, out=out)
  File "/homes/kshivvy20/anaconda3/envs/SB3/lib/python3.9/site-packages/numpy/core/fromnumeric.py", line 57, in _wrapfunc
    return bound(*args, **kwds)
ValueError: attempt to get argmax of an empty sequence

This seems to be a NxSDK issue but I’m not sure since I was working off of a dev branch of Loihi. How should I proceed in order to extract energy readings?

Thank you!

I was able to fix this by removing the sim.sims["loihi"].connect() and sim.sims["loihi"].close() lines, and by calling sim.run_steps() inside a with statement.

1 Like