2025, Nov 04 12:02
Ошибка TensorFlow на Kaggle: failed call to cuInit (303) — включите GPU
TensorFlow в Kaggle падает с failed call to cuInit: UNKNOWN ERROR (303)? Причина — ядро без GPU. Узнайте как включить GPU и загрузить модель без ошибок CUDA.
Когда модель TensorFlow отказывается загружаться на Kaggle из‑за ошибки инициализации CUDA, легко заподозрить драйверы, несовместимые версии или повреждённые колёса. В этом случае причина куда проще: ядро Kaggle запущено без GPU, поэтому инициализация CUDA (cuInit) прерывается, а TensorFlow сообщает UNKNOWN ERROR (303). Ниже — сжатое пошаговое объяснение: как проявляется проблема, что происходит и как её устранить.
Минимальный пример
В окружении используется TensorFlow 2.18.0; запрос сведений о сборке TensorFlow показывает CUDA 12.5.1. Модель загружается через keras.load_model внутри ноутбука Kaggle.
import os as os_mod, json as json_mod, joblib as jl
from pathlib import Path as P
import warnings as warn
warn.filterwarnings("ignore")
from sklearn.model_selection import train_test_split as split_train_test
from sklearn.preprocessing import StandardScaler as StdScaler, LabelEncoder as LabelEnc
from sklearn.utils.class_weight import compute_class_weight as calc_class_weight
from tensorflow.keras.utils import Sequence as KSeq, to_categorical as to_cat, pad_sequences as pad_seq
from tensorflow.keras.models import Model as KModel, load_model as load_trained
from tensorflow.keras.layers import (
Input as KInput, Conv1D as Conv1d, BatchNormalization as BN, Activation as Act, add as add_layer, MaxPooling1D as MaxPool1d, Dropout as Drop,
Bidirectional as Bi, LSTM as Lstm, GlobalAveragePooling1D as GAP1d, Dense as DenseLayer, Multiply as Mul, Reshape as ReshapeLayer,
Lambda as LambdaLayer, Concatenate as Concat, GRU as Gru, GaussianNoise as GNoise
)
from tensorflow.keras.regularizers import l2 as l2_reg
from tensorflow.keras.optimizers import Adam as AdamOpt
from tensorflow.keras.callbacks import EarlyStopping as EarlyStop
from tensorflow.keras import backend as Kb
import tensorflow as tf
import polars as pl
from sklearn.model_selection import StratifiedGroupKFold as StratGroupKF
from scipy.spatial.transform import Rotation as Rot
WEIGHTS_ROOT = P("/kaggle/input/gesture_two_branch_mixup.h5/tensorflow2/default/1")
net = load_trained(
WEIGHTS_ROOT / "gesture_two_branch_mixup.h5",
compile=False,
custom_objects=alt_objects
)
Сбой проявляется так:
failed call to cuInit: INTERNAL: CUDA error: Failed call to cuInit: UNKNOWN ERROR (303)
Контекст той же сессии:
tensorflow: 2.18.0
print(tf.sysconfig.get_build_info()['cuda_version'])
# 12.5.1
Что происходит на самом деле
На Kaggle по умолчанию среда запуска — только CPU. Если ядро не настроено на использование GPU, TensorFlow всё равно пытается инициализировать CUDA и, не найдя GPU‑окружения, падает на вызове cuInit. В результате при вызове keras.load_model вы видите UNKNOWN ERROR (303).
Как исправить
Переключите оборудование ноутбука Kaggle на GPU. В Kaggle есть простой тумблер Enable GPU. Включите его для своего ядра и перезапустите сессию, чтобы подготовилось GPU‑окружение. Официальная пошаговая инструкция: https://www.kaggle.com/code/dansbecker/running-kaggle-kernels-with-a-gpu
Изменения в код не требуются. После включения GPU выполните тот же код загрузки ещё раз:
from pathlib import Path as P
from tensorflow.keras.models import load_model as load_trained
WEIGHTS_ROOT = P("/kaggle/input/gesture_two_branch_mixup.h5/tensorflow2/default/1")
net = load_trained(
WEIGHTS_ROOT / "gesture_two_branch_mixup.h5",
compile=False,
custom_objects=alt_objects
)
Почему это важно
Неправильно настроенные аппаратные ускорители отнимают время и могут маскироваться под проблемы с пакетами или драйверами. В облачных ноутбуках вроде Kaggle выбор корректного режима выполнения — обязательное условие для всех задач, зависящих от GPU. Запуск ядра с поддержкой GPU устраняет сбой на этапе cuInit и позволяет TensorFlow работать штатно.
Заключение
Перед загрузкой или обучением моделей TensorFlow/Keras с поддержкой GPU на Kaggle убедитесь, что ядро запущено с включённой опцией Enable GPU, а затем перезапустите ноутбук. Если нужно вспомнить, где находится этот переключатель, обратитесь к руководству Kaggle по ссылке выше. С активированным GPU тот же путь коду, который раньше падал на cuInit, выполняется без ошибки UNKNOWN ERROR (303).
Статья основана на вопросе на StackOverflow от Sankarshan Acharya и ответе от Wyck.