mkl_fft icon indicating copy to clipboard operation
mkl_fft copied to clipboard

ValueError: Internal error occurred: b'Intel MKL DFTI ERROR: Inconsistent configuration parameters' for certain shapes in _numpy_fft.rfft

Open JesseLivezey opened this issue 4 years ago • 11 comments

For certain large 1d rffts, I get the following error. Tested this in anaconda python 3.7 and 3.8 on linux. If the long/fft axis is 1 instead of 0, I don't get this error.

ValueError: Internal error occurred: b'Intel MKL DFTI ERROR: Inconsistent configuration parameters'

This example generates the error below

import numpy as np
from mkl_fft._numpy_fft import rfft


X = np.random.randn(18134053, 1)
rfft(X, axis=0) # ok
print(18134052, 1)

X = np.random.randn(18134053, 16)
rfft(X, axis=0) # generates error
print(18134052, 16)
18134052 1
Traceback (most recent call last):
  File "mkl_test.py", line 10, in <module>
    rfft(X, axis=0)
  File "/home/jesse/anaconda3/envs/mkl_test/lib/python3.7/site-packages/mkl_fft/_numpy_fft.py", line 414, in rfft
    (x,), {'n': n, 'axis': axis})
  File "/home/jesse/anaconda3/envs/mkl_test/lib/python3.7/site-packages/mkl_fft/_numpy_fft.py", line 103, in trycall
    raise ve
  File "/home/jesse/anaconda3/envs/mkl_test/lib/python3.7/site-packages/mkl_fft/_numpy_fft.py", line 98, in trycall
    res = func(*args, **kwrds)
  File "mkl_fft/_pydfti.pyx", line 792, in mkl_fft._pydfti.rfft_numpy
  File "mkl_fft/_pydfti.pyx", line 701, in mkl_fft._pydfti._rc_fft1d_impl
ValueError: Internal error occurred: b'Intel MKL DFTI ERROR: Inconsistent configuration parameters'

This is in a basic conda environment with only numpy added.

$ conda list
# packages in environment at /home/jesse/anaconda3/envs/mkl_test:
#
# Name                    Version                   Build  Channel
_libgcc_mutex             0.1                        main  
blas                      1.0                         mkl  
ca-certificates           2021.1.19            h06a4308_0  
certifi                   2020.12.5        py37h06a4308_0  
intel-openmp              2020.2                      254  
ld_impl_linux-64          2.33.1               h53a641e_7  
libedit                   3.1.20191231         h14c3975_1  
libffi                    3.3                  he6710b0_2  
libgcc-ng                 9.1.0                hdf63c60_0  
libstdcxx-ng              9.1.0                hdf63c60_0  
mkl                       2020.2                      256  
mkl-service               2.3.0            py37he8ac12f_0  
mkl_fft                   1.3.0            py37h54f3939_0  
mkl_random                1.1.1            py37h0573a6f_0  
ncurses                   6.2                  he6710b0_1  
numpy                     1.19.2           py37h54aff64_0  
numpy-base                1.19.2           py37hfa32c7d_0  
openssl                   1.1.1j               h27cfd23_0  
pip                       21.0.1           py37h06a4308_0  
python                    3.7.10               hdb3f193_0  
readline                  8.1                  h27cfd23_0  
setuptools                52.0.0           py37h06a4308_0  
six                       1.15.0           py37h06a4308_0  
sqlite                    3.33.0               h62c20be_0  
tk                        8.6.10               hbc83047_0  
wheel                     0.36.2             pyhd3eb1b0_0  
xz                        5.2.5                h7b6447c_0  
zlib                      1.2.11               h7b6447c_3  

and

mkl.get_version()
# {'MajorVersion': 2020, 'MinorVersion': 0, 'UpdateVersion': 2, 'ProductStatus': b'Product',
# 'Build': b'20200624', 'Processor': b'Intel(R) Advanced Vector Extensions 2 (Intel(R) AVX2) enabled processors',
# 'Platform': b'Intel(R) 64 architecture'}

Possibly similar to #24.

cc @hlillemark

JesseLivezey avatar Mar 04 '21 20:03 JesseLivezey

No errors with fft along axis 1

import numpy as np
from mkl_fft._numpy_fft import rfft


X = np.random.randn(1, 18134053)
rfft(X, axis=1)
print(1, 18134052)

X = np.random.randn(16, 18134053)
rfft(X, axis=1)
print(16, 18134052)

JesseLivezey avatar Mar 04 '21 20:03 JesseLivezey

The same error happens for irfft, fft, ifft in _numpy_fft with this shape.

JesseLivezey avatar Mar 05 '21 19:03 JesseLivezey

Thank you for the report @JesseLivezey.

This must be a recently introduced change.

In [1]: import numpy as np

In [2]: from mkl_fft._numpy_fft import rfft

In [3]: import mkl_fft

In [4]: X = np.random.randn(1, 18134053)

In [5]: Y = mkl_fft.rfft_numpy(X)

In [6]: Y.shape
Out[6]: (1, 9067027)

In [7]: Y = mkl_fft.rfft_numpy(X, axis=0)

In [8]: Y.shape
Out[8]: (1, 18134053)

In [9]: mkl_fft.__version__
Out[9]: '1.2.0'

Also, just having created an environment from conda-forge:

conda create -n cf_mkl_fft_issue_57 python ipython mkl numpy mkl_fft mkl-service

I can not reproduce the issue:

Python 3.9.2 | packaged by conda-forge | (default, Feb 21 2021, 05:02:46)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.21.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import numpy as np, mkl_fft, mkl

In [2]: X = np.random.randn(1, 18134053)

In [3]: Y = mkl_fft.rfft_numpy(X)

In [4]: Y0 = mkl_fft.rfft_numpy(X, axis=0)

In [5]: mkl.get_version_string()
Out[5]: 'Intel(R) Math Kernel Library Version 2020.0.4 Product Build 20200917 for Intel(R) 64 architecture applications'

I also can not reproduce the issue using the latest oneMKL version 2020.1, and the development version 2020.2 to be released soon.

oleksandr-pavlyk avatar Mar 06 '21 16:03 oleksandr-pavlyk

@oleksandr-pavlyk I only get errors when the first dim is the long/fft dimension and the second is >1

X = np.random.randn(18134053, 2) # for me, anything >=2 for the second dim causes an error

In your tests, it looks like the second dimension is long, but you're taking the fft over the first.

JesseLivezey avatar Mar 06 '21 18:03 JesseLivezey

Thank you @JesseLivezey I have reproduced the issue. It appears like MKL raises this exception when the dimension is greater than 2^24.

In [31]: Y0 = mkl_fft.rfft_numpy(X[slice(0, 2**24, 1), :], axis=0)
MKL_VERBOSE FFT(drfo16777216:2:2*2:1:1,bScale:5.96046e-08,tLim:6,unaligned_input,unaligned_output,desc:0x56293beeb700) 221.30ms CNR:OFF Dyn:1 FastMM:1 TID:0  NThr:6

In [32]: Y0 = mkl_fft.rfft_numpy(X[slice(0, 2**24 + 1, 1), :], axis=0)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-32-c91c2fa3cd09> in <module>()
----> 1 Y0 = mkl_fft.rfft_numpy(X[slice(0, 2**24 + 1, 1), :], axis=0)

mkl_fft/_pydfti.pyx in mkl_fft._pydfti.rfft_numpy()

mkl_fft/_pydfti.pyx in mkl_fft._pydfti._rc_fft1d_impl()

ValueError: Internal error occurred: b'Intel MKL DFTI ERROR: Inconsistent configuration parameters'

oleksandr-pavlyk avatar Mar 08 '21 14:03 oleksandr-pavlyk

I reproduced the internal error using C programming language and reported the issue to MKL team.

oleksandr-pavlyk avatar Mar 08 '21 22:03 oleksandr-pavlyk

@oleksandr-pavlyk Apologies for reopening this old issue, but was there a resolution to this problem? We think we might be seeing a very similar issue in our code which directly calls the mkl runtime, and it would be good to rule out if it's an error on our end. Is there a link to the issue reporting (if public)?

ahnitz avatar Jun 15 '23 19:06 ahnitz

@ahnitz Once the issue was originally reported, I changed mkl_fft to do a better job at reporting the error that MKL itself is flagging. I also notified relevant MKL team about the problem.

I have just checked that nightly builds of MKL still flag the input generated from input In[32] in my excerpt from Mar 8 comment as problematic.

I would therefore think the problem has not found its resolution as yet.

oleksandr-pavlyk avatar Jul 10 '23 23:07 oleksandr-pavlyk

I encounter a similar issue when using ifft2d. Is there any progress on this ticket?

GeJulia avatar Jul 12 '23 09:07 GeJulia