[Eeglablist] AMICA15 segmentation fault
Jason Palmer
japalmer29 at gmail.com
Wed Dec 16 07:51:01 PST 2015
Hi Nathan,
Thanks for your early beta testing ... I was getting local feedback/debugging before announcing new version to wider list, but I guess it makes more sense to release a sort of beta version to the eeglablist. The new binaries (with sphering bug hopefully fixed) and test version of eeglab plugin is at:
http://sccn.ucsd.edu/~jason/amica_web.html
and there is a help link on that page for more information on arguments in the gui. So, anyone is welcome to try amica15, and the plugin, and help test it.
I think what you are actually getting is a stack overflow because it is attempting to use too large a matrix block size with a large number of samples. I think do_opt_block is enabled by default, and it tries 256:256:1024 to find the fastest blocksize. You can change this with the Block sizes, etc. button. In the gui, or the blk_min, blk_step, blk_max keywords.
Probably if you set smaller values, like blk_min = 64, blk_step = 64, blk_max = 256, it will get through the tests without segmentation fault. I'm still working on catching this error in the code.
So I don't think your issue has to do with sphering--it is just printing the eigenvalue info twice (which I will remove) but I don't think anything is going wrong.
For anyone who would like to look at and/or compile the source code, you can get it at:
https://github.com/japalmer29/amica
with a readme on how to compile it using a demo version of the Intel Fortran compiler on various platforms.
Thanks, and happy winter!
Jason
-----Original Message-----
From: eeglablist-bounces at sccn.ucsd.edu [mailto:eeglablist-bounces at sccn.ucsd.edu] On Behalf Of Norman Forschack
Sent: Monday, December 14, 2015 4:40 PM
To: eeglablist
Subject: [Eeglablist] AMICA15 segmentation fault
Dear eeglabbers,
first of all, Jason, thanks a lot for providing the new version of amica for us, your input is always highly appreciated!
I tested the new version with the dataset from the homepage and it works neatly (after adjusting the call to the Ubuntu binary to 'amica15ub').
However, when running it on another EEG dataset with 62 channels, I have some trouble with negative but very small eigenvalues, which might be related to this post http://sccn.ucsd.edu/pipermail/eeglablist/2015/010104.html
This causes amica to exit after the message 'segmentation fault'. The data is comprised of merged ten minutes blocks and is minimally preprocessed:
1. PREP pipeline robust average reference 2. resampling to 250Hz 3. 1Hz high pass 4. thresholding data points > 180 microV
The issue occurs when pcakeep option is enabled (see below for command line output)
I tried without pcakeep but with removed channels, mainly EOG and PREP interpolated channels, in order to input full rank data. This yields positive eigenvalues, but again, the algorithm exits with 'segmentation fault'.
I have no idea how to overcome this, but I'm wondering why eigenvalues are calculated twice? Are they supposed to differ at the second instance? In my case they don't. (see command line output below) Or could there probably be something wrong with my data preprocessing, am I missing something?
Any hint how to solve the problem, is highly anticipated.
Best
Norman
run with data dimensions reduced:
Writing data file: /.../tmpdata96489.fdt
mkdir: cannot create directory '/.../amicaouttmp/': File exists
1 processor name = kambodscha
1 host_num = 2033974327
This is MPI process 1 of 1 ; I am process 1 of
1 on node: kambodscha
1 : node root process 1 of 1
Processing arguments ...
num_files = 1
FILES:
/.../tmpdata96489.fdt
num_dir_files = 1
initial matrix block_size = 128
do_opt_block = 1
blk_min = 256
blk_step = 256
blk_max = 1024
number of models = 1
max_thrds = 8
use_min_dll = 1
min dll = 1.000000000000000E-009
use_grad_norm = 1
min grad norm = 1.000000000000000E-007
number of density mixture components = 3
pdf type = 0
max_iter = 2000
num_samples = 1
data_dim = 61
field_dim = 1115606
do_history = 0
histstep = 10
share_comps = 0
share_start = 100
comp_thresh = 0.990000000000000
share_int = 100
initial lrate = 5.000000000000000E-002
minimum lrate = 1.000000000000000E-008
minimum data covariance eigenvalue = 1.000000000000000E-012
lrate factor = 0.500000000000000
initial rholrate = 5.000000000000000E-002
rho0 = 1.50000000000000
min rho = 1.00000000000000
max rho = 2.00000000000000
rho lrate factor = 0.500000000000000
kurt_start = 3
num kurt = 5
kurt interval = 1
do_newton = 1
newt_start = 50
newt_ramp = 10
initial newton lrate = 1.00000000000000
do_reject = 1
num reject = 3
reject sigma = 3.00000000000000
reject start = 3
reject interval = 3
write step = 20
write_nd = 0
write_LLt = 1
dec window = 1
max_decs = 3
fix_init = 0
update_A = 1
update_c = 1
update_gm = 1
update_alpha = 1
update_mu = 1
update_beta = 1
invsigmax = 100.000000000000
invsigmin = 0.000000000000000E+000
do_rho = 1
load_rej = 0
load_c = 0
load_gm = 0
load_alpha = 0
load_mu = 0
load_beta = 0
load_rho = 0
load_comp_list = 0
do_mean = 1
do_sphere = 1
pcakeep = 57
pcadb = 30.0000000000000
byte_size = 4
doscaling = 1
scalestep = 1
mkdir: cannot create directory '/.../amicaouttmp/': File exists output directory = /.../amicaouttmp/
1 : setting num_thrds to 8 ...
1 : using 8 threads.
1 : node_thrds = 8
bytes in real = 1
1 : REAL nbyte = 1
getting segment list ...
blocks in sample = 1115606
total blocks = 1115606
node blocks = 1115606
node 1 start: file 1 sample 1 index
1
node 1 stop : file 1 sample 1 index
1115606
1 : data = -4.96359205245972 -14.1346406936646
getting the mean ...
mean = -0.314507310018316 -0.304240499189297
-5.144710467579993E-002
subtracting the mean ...
getting the covariance matrix ...
cnt = 1115606
doing eig nx = 61 lwork = 37210
minimum eigenvalues = -5.406684296262385E-013 -1.285030795456605E-014
2.538997580317705E-013
maximum eigenvalues = 4158.38269386037 1002.93581119057
747.275462874866
num eigs kept = 57
getting the sphering matrix ...
minimum eigenvalues = -5.406684296262385E-013 -1.285030795456605E-014
2.538997580317705E-013
maximum eigenvalues = 4158.38269386037 1002.93581119057
747.275462874866
num eigs kept = 57
sphering the data ...
numeigs = 57
1 : Allocating variables ...
1 : Initializing variables ...
1 : Determining optimal block size ....
/home/.../amica15ub /.../amicaouttmp/input.param: Segmentation fault No gm present, setting num_models to 1 No W present, exiting
run with interpolated channels removed:
Writing data file: /.../tmpdata95717.fdt
mkdir: cannot create directory '/.../amicaouttmp/': File exists
1 processor name = kambodscha
1 host_num = 2033974327
This is MPI process 1 of 1 ; I am process 1 of
1 on node: kambodscha
1 : node root process 1 of 1
Processing arguments ...
num_files = 1
FILES:
/.../tmpdata95717.fdt
num_dir_files = 1
initial matrix block_size = 128
do_opt_block = 1
blk_min = 256
blk_step = 256
blk_max = 1024
number of models = 1
max_thrds = 8
use_min_dll = 1
min dll = 1.000000000000000E-009
use_grad_norm = 1
min grad norm = 1.000000000000000E-007
number of density mixture components = 3
pdf type = 0
max_iter = 2000
num_samples = 1
data_dim = 57
field_dim = 1116754
do_history = 0
histstep = 10
share_comps = 0
share_start = 100
comp_thresh = 0.990000000000000
share_int = 100
initial lrate = 5.000000000000000E-002
minimum lrate = 1.000000000000000E-008
minimum data covariance eigenvalue = 1.000000000000000E-012
lrate factor = 0.500000000000000
initial rholrate = 5.000000000000000E-002
rho0 = 1.50000000000000
min rho = 1.00000000000000
max rho = 2.00000000000000
rho lrate factor = 0.500000000000000
kurt_start = 3
num kurt = 5
kurt interval = 1
do_newton = 1
newt_start = 50
newt_ramp = 10
initial newton lrate = 1.00000000000000
do_reject = 1
num reject = 3
reject sigma = 3.00000000000000
reject start = 3
reject interval = 3
write step = 20
write_nd = 0
write_LLt = 1
dec window = 1
max_decs = 3
fix_init = 0
update_A = 1
update_c = 1
update_gm = 1
update_alpha = 1
update_mu = 1
update_beta = 1
invsigmax = 100.000000000000
invsigmin = 0.000000000000000E+000
do_rho = 1
load_rej = 0
load_c = 0
load_gm = 0
load_alpha = 0
load_mu = 0
load_beta = 0
load_rho = 0
load_comp_list = 0
do_mean = 1
do_sphere = 1
pcakeep = 57
pcadb = 30.0000000000000
byte_size = 4
doscaling = 1
scalestep = 1
mkdir: cannot create directory '/.../amicaouttmp/': File exists
output directory = /.../amicaouttmp/
1 : setting num_thrds to 8 ...
1 : using 8 threads.
1 : node_thrds = 8
bytes in real = 1
1 : REAL nbyte = 1
getting segment list ...
blocks in sample = 1116754
total blocks = 1116754
node blocks = 1116754
node 1 start: file 1 sample 1 index
1
node 1 stop : file 1 sample 1 index
1116754
1 : data = -4.96453666687012 -14.1324272155762
getting the mean ...
mean = -0.286942247592682 -0.278907745979486
-4.659303225201700E-002
subtracting the mean ...
getting the covariance matrix ...
cnt = 1116754
doing eig nx = 57 lwork = 32490
minimum eigenvalues = 0.328194400980202 0.540830260003019
0.590640211589886
maximum eigenvalues = 3591.26449346892 979.044648222552
723.438382000281
num eigs kept = 57
getting the sphering matrix ...
minimum eigenvalues = 0.328194400980202 0.540830260003019
0.590640211589886
maximum eigenvalues = 3591.26449346892 979.044648222552
723.438382000281
num eigs kept = 57
sphering the data ...
numeigs = 57
1 : Allocating variables ...
1 : Initializing variables ...
1 : Determining optimal block size ....
/home/.../amica15ub /.../amicaouttmp/input.param: Segmentation fault
No gm present, setting num_models to 1
No W present, exiting
Sometimes I also get a more verbose feedback, but I cannot reproduce this consistently:
forrtl: severe (174): SIGSEGV, segmentation fault occurred
forrtl: severe (174): SIGSEGV, segmentation fault occurred
/.../amica15ub /.../amicaouttmp/input.param: Signal 46
___________________________________________________________
Norman Forschack, Dipl.-Psych.
Max-Planck Institute for Human Cognitive and Brain Sciences
Stephanstraße 1a
04103 Leipzig
mail: forschack at cbs.mpg.de
phone: +49341 9940171
web: http://www.cbs.mpg.de/~forschack
_______________________________________________
Eeglablist page: http://sccn.ucsd.edu/eeglab/eeglabmail.html
To unsubscribe, send an empty email to eeglablist-unsubscribe at sccn.ucsd.edu
For digest mode, send an email with the subject "set digest mime" to eeglablist-request at sccn.ucsd.edu
More information about the eeglablist
mailing list