MouseLand / Kilosort

Fast spike sorting with drift correction
https://kilosort.readthedocs.io/en/latest/
GNU General Public License v3.0
488 stars 247 forks source link

UnboundLocalError:local variable 'xy' referenced before assignment #816

Closed zetonew closed 2 weeks ago

zetonew commented 2 weeks ago

Feature you'd like to see:

I always meet the UnboundLocal error. Still cannot figure out how to solve them.

11-10 17:15 kilosort.gui.sorter INFO Kilosort version 4.0.20 11-10 17:15 kilosort.gui.sorter INFO Sorting F:\neuropixel\2024-07-16_18-06-10\Record Node 103\experiment1\recording2\continuous\Neuropix-PXI-100.ProbeA-AP\continuous.dat 11-10 17:15 kilosort.gui.sorter INFO ---------------------------------------- 11-10 17:15 kilosort.gui.sorter DEBUG Initial ops: { 'data_file_path': WindowsPath('F:/neuropixel/2024-07-16_18-06-10/Record Node 103/experiment1/recording2/continuous/Neuropix-PXI-100.ProbeA-AP/continuous.dat'), 'results_dir': WindowsPath('F:/neuropixel/2024-07-16_18-06-10/Record Node 103/experiment1/recording2/continuous/Neuropix-PXI-100.ProbeA-AP/kilosort4'), 'probe_name': 'neuropixPhase3B1_kilosortChanMap.mat', 'data_dtype': 'int16', 'n_chan_bin': 384, 'fs': 30000.0, 'batch_size': 60000, 'nblocks': 1, 'Th_universal': 9.0, 'Th_learned': 8.0, 'tmin': 0.0, 'tmax': inf, 'nt': 61, 'shift': None, 'scale': None, 'artifact_threshold': inf, 'nskip': 25, 'whitening_range': 32, 'highpass_cutoff': 300.0, 'binning_depth': 5.0, 'sig_interp': 20.0, 'drift_smoothing': [0.5, 0.5, 0.5], 'nt0min': 20, 'dmin': None, 'dminx': 32.0, 'min_template_size': 10.0, 'template_sizes': 5, 'nearest_chans': 10, 'nearest_templates': 100, 'max_channel_distance': None, 'templates_from_data': True, 'n_templates': 6, 'n_pcs': 6, 'Th_single_ch': 6.0, 'acg_threshold': 0.2, 'ccg_threshold': 0.25, 'cluster_downsampling': 20, 'x_centers': None, 'duplicate_spike_ms': 0.25, 'save_preprocessed_copy': False, 'clear_cache': False, 'do_CAR': True, 'invert_sign': False, 'data_dir': WindowsPath('F:/neuropixel/2024-07-16_18-06-10/Record Node 103/experiment1/recording2/continuous/Neuropix-PXI-100.ProbeA-AP'), 'filename': WindowsPath('F:/neuropixel/2024-07-16_18-06-10/Record Node 103/experiment1/recording2/continuous/Neuropix-PXI-100.ProbeA-AP/continuous.dat'), 'NTbuff': 60122, 'Nchan': 383, 'duplicate_spike_bins': 7, 'torch_device': 'cuda', 'xc': array([43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27., 43., 11., 59., 27.], dtype=float32), 'yc': array([ 20., 20., 40., 40., 60., 60., 80., 80., 100., 100., 120., 120., 140., 140., 160., 160., 180., 180., 200., 200., 220., 220., 240., 240., 260., 260., 280., 280., 300., 300., 320., 320., 340., 340., 360., 360., 380., 380., 400., 400., 420., 420., 440., 440., 460., 460., 480., 480., 500., 500., 520., 520., 540., 540., 560., 560., 580., 580., 600., 600., 620., 620., 640., 640., 660., 660., 680., 680., 700., 700., 720., 720., 740., 740., 760., 760., 780., 780., 800., 800., 820., 820., 840., 840., 860., 860., 880., 880., 900., 900., 920., 920., 940., 940., 960., 960., 980., 980., 1000., 1000., 1020., 1020., 1040., 1040., 1060., 1060., 1080., 1080., 1100., 1100., 1120., 1120., 1140., 1140., 1160., 1160., 1180., 1180., 1200., 1200., 1220., 1220., 1240., 1240., 1260., 1260., 1280., 1280., 1300., 1300., 1320., 1320., 1340., 1340., 1360., 1360., 1380., 1380., 1400., 1400., 1420., 1420., 1440., 1440., 1460., 1460., 1480., 1480., 1500., 1500., 1520., 1520., 1540., 1540., 1560., 1560., 1580., 1580., 1600., 1600., 1620., 1620., 1640., 1640., 1660., 1660., 1680., 1680., 1700., 1700., 1720., 1720., 1740., 1740., 1760., 1760., 1780., 1780., 1800., 1800., 1820., 1820., 1840., 1840., 1860., 1860., 1880., 1880., 1900., 1900., 1920., 1940., 1940., 1960., 1960., 1980., 1980., 2000., 2000., 2020., 2020., 2040., 2040., 2060., 2060., 2080., 2080., 2100., 2100., 2120., 2120., 2140., 2140., 2160., 2160., 2180., 2180., 2200., 2200., 2220., 2220., 2240., 2240., 2260., 2260., 2280., 2280., 2300., 2300., 2320., 2320., 2340., 2340., 2360., 2360., 2380., 2380., 2400., 2400., 2420., 2420., 2440., 2440., 2460., 2460., 2480., 2480., 2500., 2500., 2520., 2520., 2540., 2540., 2560., 2560., 2580., 2580., 2600., 2600., 2620., 2620., 2640., 2640., 2660., 2660., 2680., 2680., 2700., 2700., 2720., 2720., 2740., 2740., 2760., 2760., 2780., 2780., 2800., 2800., 2820., 2820., 2840., 2840., 2860., 2860., 2880., 2880., 2900., 2900., 2920., 2920., 2940., 2940., 2960., 2960., 2980., 2980., 3000., 3000., 3020., 3020., 3040., 3040., 3060., 3060., 3080., 3080., 3100., 3100., 3120., 3120., 3140., 3140., 3160., 3160., 3180., 3180., 3200., 3200., 3220., 3220., 3240., 3240., 3260., 3260., 3280., 3280., 3300., 3300., 3320., 3320., 3340., 3340., 3360., 3360., 3380., 3380., 3400., 3400., 3420., 3420., 3440., 3440., 3460., 3460., 3480., 3480., 3500., 3500., 3520., 3520., 3540., 3540., 3560., 3560., 3580., 3580., 3600., 3600., 3620., 3620., 3640., 3640., 3660., 3660., 3680., 3680., 3700., 3700., 3720., 3720., 3740., 3740., 3760., 3760., 3780., 3780., 3800., 3800., 3820., 3820., 3840., 3840.], dtype=float32), 'kcoords': array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32), 'chanMap': array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383]), 'n_chan': 384}

11-10 17:15 kilosort.run_kilosort INFO 11-10 17:15 kilosort.run_kilosort INFO Computing preprocessing variables. 11-10 17:15 kilosort.run_kilosort INFO ---------------------------------------- 11-10 17:15 kilosort.run_kilosort INFO N samples: 92516620 11-10 17:15 kilosort.run_kilosort INFO N seconds: 3083.887333333333 11-10 17:15 kilosort.run_kilosort INFO N batches: 1542 11-10 17:15 kilosort.run_kilosort INFO Preprocessing filters computed in 19.92s; total 19.93s 11-10 17:15 kilosort.run_kilosort DEBUG hp_filter shape: torch.Size([30122]) 11-10 17:15 kilosort.run_kilosort DEBUG whiten_mat shape: torch.Size([383, 383]) 11-10 17:15 kilosort.run_kilosort INFO 11-10 17:15 kilosort.run_kilosort INFO Resource usage after preprocessing 11-10 17:15 kilosort.run_kilosort INFO **** 11-10 17:15 kilosort.run_kilosort INFO CPU usage: 0.00 % 11-10 17:15 kilosort.run_kilosort INFO Memory: 61.07 % | 9.60 / 15.71 GB 11-10 17:15 kilosort.run_kilosort INFO ------------------------------------------------------ 11-10 17:15 kilosort.run_kilosort INFO GPU usage: conda install pynvml for GPU usage 11-10 17:15 kilosort.run_kilosort INFO GPU memory: 86.04 % | 3.44 / 4.00 GB 11-10 17:15 kilosort.run_kilosort INFO Allocated: 0.43 % | 0.02 / 4.00 GB 11-10 17:15 kilosort.run_kilosort INFO Max alloc: 32.81 % | 1.31 / 4.00 GB 11-10 17:15 kilosort.run_kilosort INFO **** 11-10 17:15 kilosort.run_kilosort INFO 11-10 17:15 kilosort.run_kilosort INFO Computing drift correction. 11-10 17:15 kilosort.run_kilosort INFO ---------------------------------------- 11-10 17:15 kilosort.spikedetect INFO Re-computing universal templates from data. 11-10 17:16 kilosort.spikedetect INFO Number of universal templates: 1532 11-10 17:16 kilosort.spikedetect INFO Detecting spikes... 11-10 17:16 kilosort.spikedetect DEBUG 11-10 17:16 kilosort.spikedetect DEBUG Batch 0 11-10 17:16 kilosort.spikedetect DEBUG **** 11-10 17:16 kilosort.spikedetect DEBUG CPU usage: 6.50 % 11-10 17:16 kilosort.spikedetect DEBUG Memory: 77.65 % | 12.20 / 15.71 GB 11-10 17:16 kilosort.spikedetect DEBUG ------------------------------------------------------ 11-10 17:16 kilosort.spikedetect DEBUG GPU usage: conda install pynvml for GPU usage 11-10 17:16 kilosort.spikedetect DEBUG GPU memory: 85.61 % | 3.42 / 4.00 GB 11-10 17:16 kilosort.spikedetect DEBUG Allocated: 0.47 % | 0.02 / 4.00 GB 11-10 17:16 kilosort.spikedetect DEBUG Max alloc: 32.82 % | 1.31 / 4.00 GB 11-10 17:16 kilosort.spikedetect DEBUG **** 11-10 17:16 kilosort.spikedetect ERROR Error in spikedetect.run on batch 0 Traceback (most recent call last): File "C:\Users\54668.conda\envs\kilosort\lib\site-packages\kilosort\spikedetect.py", line 263, in run xy, imax, amp, adist = template_match(X, ops, iC, iC2, weigh, device=device) File "C:\Users\54668.conda\envs\kilosort\lib\site-packages\kilosort\spikedetect.py", line 165, in template_match Amax = torch.max(Aa[iC2], 0)[0] torch.OutOfMemoryError: CUDA out of memory. Tried to allocate 880.00 MiB. GPU 0 has a total capacity of 4.00 GiB of which 0 bytes is free. Of the allocated memory 2.27 GiB is allocated by PyTorch, and 290.03 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True to avoid fragmentation. See documentation for Memory Management (https://pytorch.org/docs/stable/notes/cuda.html#environment-variables) 11-10 17:16 kilosort.spikedetect DEBUG X shape: torch.Size([383, 60122]) 11-10 17:16 kilosort.gui.sorter ERROR Encountered error in run_kilosort: Traceback (most recent call last): File "C:\Users\54668.conda\envs\kilosort\lib\site-packages\kilosort\spikedetect.py", line 263, in run xy, imax, amp, adist = template_match(X, ops, iC, iC2, weigh, device=device) File "C:\Users\54668.conda\envs\kilosort\lib\site-packages\kilosort\spikedetect.py", line 165, in template_match Amax = torch.max(Aa[iC2], 0)[0] torch.OutOfMemoryError: CUDA out of memory. Tried to allocate 880.00 MiB. GPU 0 has a total capacity of 4.00 GiB of which 0 bytes is free. Of the allocated memory 2.27 GiB is allocated by PyTorch, and 290.03 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True to avoid fragmentation. See documentation for Memory Management (https://pytorch.org/docs/stable/notes/cuda.html#environment-variables)

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "C:\Users\54668.conda\envs\kilosort\lib\site-packages\kilosort\gui\sorter.py", line 95, in run ops, bfile, st0 = compute_drift_correction( File "C:\Users\54668.conda\envs\kilosort\lib\site-packages\kilosort\run_kilosort.py", line 566, in compute_drift_correction ops, st = datashift.run(ops, bfile, device=device, progress_bar=progressbar, File "C:\Users\54668.conda\envs\kilosort\lib\site-packages\kilosort\datashift.py", line 198, in run st, , ops = spikedetect.run( File "C:\Users\54668.conda\envs\kilosort\lib\site-packages\kilosort\spikedetect.py", line 289, in run logger.debug(f'xy shape: {xy.shape}') UnboundLocalError: local variable 'xy' referenced before assignment

Additional Context

No response

jacobpennington commented 2 weeks ago

@zetonew The UnboundLocalError is not the problem, that's just a side-effect (which I've fixed for the next version release to avoid confusion). The problem is you're running out of graphics memory: torch.OutOfMemoryError: CUDA out of memory. Tried to allocate 880.00 MiB. GPU 0 has a total capacity of 4.00 GiB of which 0 bytes is free. We recommend using a graphics card with at least 8gb of memory to sort Neuropixels data. Yours only has 4GB, so running out of memory is not surprising.

zetonew commented 2 weeks ago

@jacobpennington Thank you for your reply. Already ordered a new PC.