2025, Sep 30 01:16

Сбой SSL в TensorFlow Datasets при загрузке MovieLens 100k: разбор и итог

Разбор ошибки SSL при tfds.load: просроченный сертификат сорвал загрузку MovieLens 100k в Colab и WSL2. Что происходило, какие попытки, почему решилось само.

Сбои SSL в конвейерах данных случаются редко, но бьют по процессу. Потоковая работа с TensorFlow Datasets, которая раньше выполнялась без проблем, может внезапно упасть на этапе скачивания из‑за ошибки сертификата SSL, из‑за чего стопорятся обучение и валидация. Ниже — краткий разбор сбоя: как он проявлялся в коде, что предпринималось и чем всё в итоге закончилось.

Воспроизведение проблемы

В конвейере используется TensorFlow Datasets для загрузки сплита рейтингов MovieLens 100k. Окружение настраивалось установкой tensorflow-data-validation с дополнительными компонентами для визуализации, после чего вызывался tfds.load для получения набора данных.

!pip install --upgrade 'tensorflow_data_validation[visualization]<2'
import tensorflow as tf
import tensorflow_datasets as tfds

ds_ratings, ds_info = tfds.load("movielens/100k-ratings", split="train", with_info=True)

Во время выполнения процесс многократно пытался повторить запрос и в итоге завершался ошибкой проверки SSL: сертификат истёк, когда шла попытка скачать ml-100k.zip.

WARNING:urllib3.connectionpool:Retrying (Retry(total=9, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1016)'))': /datasets/movielens/ml-100k.zip

Что происходит

Ошибка однозначно указывает на сбой рукопожатия SSL: проверка сертификата не пройдена, так как он помечен как просроченный. То же самое воспроизводилось и в Google Colab, и в среде VS Code на базе WSL2. Предпринимались разные локальные меры: отключали/включали проверку, обновляли пакет certifi, подменяли стандартный SSL‑контекст. Ничто из этого не помогло загрузке.

Попытки и результат

Обходные решения на уровне окружения результата не дали. Ошибка повторялась из запуска в запуск и в разных средах, несмотря на переключения проверки и обновления пакетов сертификатов. Это поведение указывало, что локальные правки в данном случае неэффективны.

Решение и рабочий код

В репозитории googlecolab/colabtools завели задачу. После этого повторный запуск того же кода позже успешно загрузил датасет без каких‑либо изменений. Иными словами, конвейер снова заработал в изначальном виде.

import tensorflow as tf
import tensorflow_datasets as tfds

ds_ratings, ds_info = tfds.load("movielens/100k-ratings", split="train", with_info=True)

Почему это важно

Загрузка наборов данных — базовая часть экспериментов и продакшн‑ML. Сбой проверки SSL способен остановить весь процесс, даже если прикладной код корректен. Важно распознать класс ошибки: если локальные переключатели и обновления сертификатов не помогают, а сбой повторяется в «чистых» средах, разумнее всего наблюдать и пробовать снова, а при необходимости сообщить о проблеме поддерживающим платформу или сервис. В этом случае обычный повторный запуск позже вернул всё в норму.

Выводы

Во‑первых, держите минимальный пример воспроизведения, чтобы убедиться, что сбой изолирован на этапе загрузки датасета. Во‑вторых, фиксируйте точный текст ошибки — здесь он указывал на просроченный сертификат, — это подскажет, есть ли шанс, что помогут локальные правки. В‑третьих, если один и тот же минимальный код одинаково падает в разных средах, а затем позже без изменений проходит, считайте это внешним фактором, который был устранён, и двигайтесь дальше. Главное — не устраивать лишнюю «перетряску» кода, когда сам конвейер в порядке.

Статья основана на вопросе с сайта StackOverflow от AlexEast и ответе от AlexEast.