Как я могу отключить «cudf» в определенной части моего кода?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу отключить «cudf» в определенной части моего кода?

Сообщение Anonymous »


Я запускаю приведенный ниже код с помощью python3.10 -m cudf.pandas my_py.py. Я понял, что cudf использует numba для cudf.apply в UDF без @numba.autojit (nopython=True), поэтому приведенный ниже код с объектом datetime не может быть обработан с помощью cudf.

Возможно ли я отключить cudf в этой части кода? Я попробовал df_tmp = my_df.to_pandas().apply(g_a,ax=1), но он сказал, что my_df — это pd.DF и не имел функции to_pandas(). Далее я напечатал тип объекта my_df, и он вернул

def gzpd_apply(my_df00): # некоторый код t_prelude = '08:30:00' t_prev = datetime.strptime(t_prelude, '%H:%M:%S') # некоторый код # некоторый код печать (тип (my_df)) df_tmp = my_df.apply(gzpd_apply,ось=1) # некоторый код Вот версии пакетов, которые я использую numpy==1.24.3 pandas==1.5.3 Cython==3.0.6 Swifter==1.3.4 numba==0.57.1< /п> Кадр данных my_df выглядит так:

индекс | ЮМХ | имя | время | 000 | '2020-01-01' | «Том» | '09:05:00' | ... 001 | '2022-01-01' | «Джон»| '09:05:00' | ... 002 | '2023-05-01' | «Боб» | '08:05:00' | ... В настоящее время в коде имеется следующая ошибка:

numba.core.errors.TypingError: Ошибка в конвейере режима cuda (шаг: интерфейс nopython) Нетипизированное глобальное имя «datetime»: невозможно определить тип Numba Я знаю, почему возникает такая ошибка. Интересно, как мне это обойти.

Чтобы добавить пример (2024.1.5)

Мне удалось создать игрушечный пример, воспроизводящий ошибку.

из datetime импорта datetime, timedelta импортировать numpy как np импортировать панд как pd импортируйте быстрее импорт системы, ОС #импорт жвачки защита gzpd_apply(my_df00): col_df_1 = [x для x в my_df00.index, если '_1' в x] если my_df00[col_df_1].isnull().sum()>0: вернуть np.nan если my_df00['time']==my_df00['time_1']: my_df00['time_1'] = (datetime.strptime(my_df00['time_1'], '%H:%M:%S')+timedelta(минуты=5)).strftime('%H:%M:%S ') return my_df00.rename(index=dict({x:x for x in my_df00.index})).transpose() if (my_df00 не имеет значения None) else np.nan защита основной(): my_df = pd.DataFrame(data={'YMH': ['2019-01-02', '2018-01-02', '2019-05-02', '2020-01-02', '2021-01 -02'], 'имя': ['Альберт', 'Алекс', 'Алиса', 'Бен', 'Боб'], 'время': ['09:00:00', '09:20:00 ', '08:00:00', '07:00:00', '09:30:00']}) my_df = pd.concat([my_df для i в диапазоне (5)], ось = 0) my_df['YMH'] = np.random.permutation(my_df['YMH'].values) my_df['time'] = np.random.permutation(my_df['time'].values) my_df = my_df.sort_values(by=['YMH', 'time', 'name'], inplace=False).reset_index(drop=True,inplace=False) my_df = pd.concat([my_df, my_df.shift(1).rename(columns=dict({x:x+'_1' for x in my_df.columns}))],axis=1) # сгенерированных данных ----------------------------------------------- ------- #df_tmp = my_df.apply(gzpd_apply,axis=1) # !! без более быстрого кода, код работает нормально df_tmp = my_df.swifter.apply(gzpd_apply,axis=1) # !! если быстрее, код возвращает ошибку. # ошибок ниже нет ---------------------------------------------- --------- df_tmp = df_tmp.T.dropna().reset_index(drop=True) df_tmp = pd.concat([r для r в df_tmp],axis=1).reset_index(drop=True) df_tmp = df_tmp.transpose() df_tmp.rename(columns=dict({i: my_df.columns for i in range(len(my_df.columns))}), inplace=True) pd.set_option('display.max_rows', 500) печать (df_tmp) если __name__ == '__main__': основной() В приведенном выше примере игрушки, если я не использую swifter, код работает нормально. Когда я использую swifter, код возвращает вышеупомянутый numba.core.errors. Обратите внимание, что в моем исходном проекте ошибка numba возникает независимо от swifter.

Приведенный выше пример игрушки имеет следующую ошибку (числовая ошибка посередине):
Traceback (последний вызов — последний): файл «/usr/local/lib/python3.10/dist-packages/swifter/swifter.py», строка 427, применяется tmp_df = func(пример, *args, **kwds) Файл «my_cudf.py», строка 10, в gzpd_apply. col_df_1 = [x для x в my_df00.index, если '_1' в x] Файл «/usr/local/lib/python3.10/dist-packages/cudf/utils/utils.py», строка 242, в __iter__ поднять TypeError( TypeError: объект Int64Index не является итеративным. Рассмотрите возможность использования `.to_arrow()`, `.to_pandas()` или `.values_host`, если вы хотите перебирать значения. Во время обработки вышеуказанного исключения произошло другое исключение: Traceback (последний вызов последний): Файл «/usr/local/lib/python3.10/dist-packages/cudf/core/indexed_frame.py», строка 2360, в _apply ядро, retty = _compile_or_get( Файл "/usr/local/lib/python3.10/dist-packages/nvtx/nvtx.py", строка 115, во внутреннем результат = func(*args, **kwargs) Файл «/usr/local/lib/python3.10/dist-packages/cudf/core/udf/utils.py», строка 269, в _compile_or_get ядро, scalar_return_type = kernel_getter(frame, func, args) Файл «/usr/local/lib/python3.10/dist-packages/cudf/core/udf/row_function.py», строка 143, в _get_row_kernel scalar_return_type = _get_udf_return_type(row_type, func, args) Файл "/usr/local/lib/python3.10/dist-packages/nvtx/nvtx.py", строка 115, во внутреннем результат = func(*args, **kwargs) Файл «/usr/local/lib/python3.10/dist-packages/cudf/core/udf/utils.py», строка 89, в _get_udf_return_type ptx, тип_вывода = cudautils.compile_udf(func, compile_sig) Файл «/usr/local/lib/python3.10/dist-packages/cudf/utils/cudautils.py», строка 126, в compile_udf ptx_code, return_type = cuda.compile_ptx_for_current_device( Файл «/usr/local/lib/python3.10/dist-packages/numba/cuda/compiler.py», строка 319, в compile_ptx_for_current_device return compile_ptx(pyfunc, sig, debug=debug, lineinfo=lineinfo, Файл «/usr/local/lib/python3.10/dist-packages/numba/core/compiler_lock.py», строка 35, в _acquire_compile_lock return func(*args, **kwargs) Файл «/usr/local/lib/python3.10/dist-packages/numba/cuda/compiler.py», строка 289, в compile_ptx cres = compile_cuda(pyfunc, return_type, args, debug=debug, Файл «/usr/local/lib/python3.10/dist-packages/numba/core/compiler_lock.py», строка 35, в _acquire_compile_lock return func(*args, **kwargs) Файл «/usr/local/lib/python3.10/dist-packages/numba/cuda/compiler.py», строка 230, в compile_cuda cres = compiler.compile_extra(typingctx=typingctx, Файл «/usr/local/lib/python3.10/dist-packages/numba/core/compiler.py», строка 762, в compile_extra вернуть конвейер.compile_extra(func) Файл «/usr/local/lib/python3.10/dist-packages/numba/core/compiler.py», строка 460, в compile_extra вернуть self._compile_bytecode() Файл «/usr/local/lib/python3.10/dist-packages/numba/core/compiler.py», строка 528, в _compile_bytecode вернуть self._compile_core() Файл «/usr/local/lib/python3.10/dist-packages/numba/core/compiler.py», строка 507, в _compile_core поднять е Файл «/usr/local/lib/python3.10/dist-packages/numba/core/compiler.py», строка 494, в _compile_core pm.run(self.state) Файл "/usr/local/lib/python3.10/dist-packages/numba/core/compiler_machinery.py", строка 368, в запуске поднять исправленное_исключение Файл "/usr/local/lib/python3.10/dist-packages/numba/core/compiler_machinery.py", строка 356, в запуске self._runPass(idx, pass_inst, состояние) Файл «/usr/local/lib/python3.10/dist-packages/numba/core/compiler_lock.py», строка 35, в _acquire_compile_lock return func(*args, **kwargs) Файл «/usr/local/lib/python3.10/dist-packages/numba/core/compiler_machinery.py», строка 311, в _runPass мутированный |= проверка(pss.run_pass, Internal_state) Файл "/usr/local/lib/python3.10/dist-packages/numba/core/compiler_machinery.py", строка 273, находится под контролем искаженный = func(compiler_state) Файл «/usr/local/lib/python3.10/dist-packages/numba/core/typed_passes.py», строка 110, в run_pass карта типов, return_type, calltypes, errs = type_inference_stage( Файл «/usr/local/lib/python3.10/dist-packages/numba/core/typed_passes.py», строка 86, в type_inference_stage infer.build_constraint() Файл «/usr/local/lib/python3.10/dist-packages/numba/core/typeinfer.py», строка 1039, в build_constraint self.constrain_statement(инст) Файл «/usr/local/lib/python3.10/dist-packages/numba/core/typeinfer.py», строка 1386, в constrain_statement self.typeof_assign(инст) Файл «/usr/local/lib/python3.10/dist-packages/numba/core/typeinfer.py», строка 1461, в typeof_assign self.typeof_global(inst, inst.target, значение) Файл «/usr/local/lib/python3.10/dist-packages/numba/core/typeinfer.py», строка 1561, в typeof_global тип = self.resolve_value_type(inst, gvar.value) Файл «/usr/local/lib/python3.10/dist-packages/numba/core/typeinfer.py», строка 1482, вsolve_value_type поднять TypingError(msg, loc=inst.loc) numba.core.errors.TypingError: сбой в конвейере режима cuda (шаг: интерфейс nopython) Нетипизированное глобальное имя datetime: Невозможно определить тип Numba Файл «my_cudf.py», строка 14: защита gzpd_apply(my_df00): если my_df00['time']==my_df00['time_1']: my_df00['time_1'] = (datetime.strptime(my_df00['time_1'], '%H:%M:%S')+timedelta(минуты=5)).strftime('%H:%M:%S ') ^ Вышеупомянутое исключение было непосредственной причиной следующего исключения: Traceback (последний вызов последний): Файл «/usr/lib/python3.10/runpy.py», строка 196, в _run_module_as_main вернуть _run_code(код, main_globals, None, Файл «/usr/lib/python3.10/runpy.py», строка 86, в _run_code exec (код, run_globals) Файл «/usr/local/lib/python3.10/dist-packages/cudf/pandas/__main__.py», строка 91, в основной() Файл «/usr/local/lib/python3.10/dist-packages/cudf/pandas/__main__.py», строка 87, в основном runpy.run_path(args.args[0], run_name="__main__") Файл «/usr/lib/python3.10/runpy.py», строка 289, в run_path вернуть _run_module_code(code, init_globals, run_name, Файл «/usr/lib/python3.10/runpy.py», строка 96, в _run_module_code _run_code(код, mod_globals, init_globals, Файл «/usr/lib/python3.10/runpy.py», строка 86, в _run_code exec (код, run_globals) Файл «my_cudf.py», строка 37, в основной() Файл «my_cudf.py», строка 27, в основном файле. df_tmp = my_df.swifter.apply(gzpd_apply,axis=1) # применить Файл "/usr/local/lib/python3.10/dist-packages/swifter/swifter.py", строка 436, применяется. timed = timeit.timeit(обернутый, число=N_REPEATS) Файл "/usr/lib/python3.10/timeit.py", строка 234, в timeit return Timer(stmt, setup, timer, globals).timeit(число) Файл "/usr/lib/python3.10/timeit.py", строка 178, в timeit время = self.inner(it, self.timer) Файл "", строка 6, во внутреннем Файл "/usr/local/lib/python3.10/dist-packages/swifter/swifter.py", строка 339, в обертке self._obj.iloc[self._SAMPLE_INDEX].apply( Файл "/usr/local/lib/python3.10/dist-packages/nvtx/nvtx.py", строка 115, во внутреннем результат = func(*args, **kwargs) Файл "/usr/local/lib/python3.10/dist-packages/cudf/core/dataframe.py", строка 4488, применяется. return self._apply(func, _get_row_kernel, *args, **kwargs) Файл "/usr/lib/python3.10/contextlib.py", строка 79, во внутреннем return func(*args, **kwds) Файл "/usr/local/lib/python3.10/dist-packages/nvtx/nvtx.py", строка 115, во внутреннем результат = func(*args, **kwargs) Файл «/usr/local/lib/python3.10/dist-packages/cudf/core/indexed_frame.py», строка 2364, в _apply поднять ValueError( ValueError: не удалось выполнить компиляцию пользовательской функции.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Ошибка установки cuDF: «Не найдено колесо для cudf-cu12 24.6.1»
    Anonymous » » в форуме Python
    0 Ответы
    44 Просмотры
    Последнее сообщение Anonymous
  • Cudf ModuleNotFoundError после установки RAPIDS в MSL2
    Anonymous » » в форуме Python
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Назначение списков как элементов CUDF DataFrame
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Почему Fine Code Coverage сообщает мне о части выполняемых тестов, а не о части тестируемого исходного кода?
    Anonymous » » в форуме C#
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Почему Fine Code Coverage сообщает мне о части выполняемых тестов, а не о части тестируемого исходного кода?
    Anonymous » » в форуме C#
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»