Исключение при использовании CuDF apply_chunks - Использование неподдерживаемой NumPy функции 'numpy .ones_like' или неподдерживаемое использование функции - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь использовать numpy изнутри Jit-оптимизированного кода Numba, но я получаю ошибки, когда пытаюсь выполнить стандартные numpy операции, такие как numpy .ones_like, хотя в документации Numba упоминается, что операция поддерживается.

Ссылка на документацию: Numba 0.46 .

Редактировать: метод 'calc_method' работает нормально, если я выполняю прямой вызов, сбой при использовании из apply_chunks. Так что, вероятно, проблема не в самой Numba, а в том, как используется cudf.apply_chunks.

Код:

import numba
from numba import jit
import pandas as pd
import numpy as np

print(numba.__version__)

@jit(nopython=True)
def calc_method(a,b):
    a1 = np.float64(a)
    b1 = np.float64(b)
    abc = (a1, np.ones_like(b1))
    abc_ht = np.hstack(abc)
    return abc_ht

def calculate(cudf_df: cudf, size_of_row: int):       
    return cudf_df.apply_chunks(calc_method, incols=['a', 'b'], outcols=dict(), chunks=size_of_row)

df = pd.DataFrame({'a': [1, 2, 3, 4, 5, 6, 7, 8], 'b': [11, 12, 13, 14, 15, 16, 17, 18]})
cudf_df = cudf.DataFrame.from_pandas(df)
a, b = calculate(cudf_df, 4)

Ошибка:

TypingError                               Traceback (most recent call last)
<ipython-input-38-ad56fb75bc4a> in <module>
----> 1 a, b = calculate(cudf_df, 4)

TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Invalid use of Function(<numba.cuda.compiler.DeviceFunctionTemplate object at 0x7fa78521b550>) with argument(s) of type(s): (array(int64, 1d, A), array(int64, 1d, A))
 * parameterized
In definition 0:
    TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Use of unsupported NumPy function 'numpy.ones_like' or unsupported use of the function.

File "<ipython-input-37-97f7d707ba81>", line 9:
def calc_method(a,b):
    <source elided>
    b1 = np.float64(b)
    abc = (a1, np.ones_like(b1))
    ^

Может кто-нибудь сказать мне, что я делаю неправильно в приведенном выше примере? Заранее спасибо.

Я также получаю похожую ошибку для np.hstack

Примечание. Это упрощенный пример воспроизведения проблемы.

1 Ответ

1 голос
/ 12 февраля 2020

Вы не можете использовать любой метод numpy, который выделяет память из ядра JIT. Как правило, вам нужно заранее распределить выходные данные, а затем установить значения этих выходов в ядре.

Здесь вы можете увидеть пример использования apply_chunks: https://gist.github.com/beckernick/acbfb9e8ac4f0657789930a0dfb57d17#file -udf_apply_chunks_basic_example -ipynb

...