Гайд · TNWS AI

Как запускать Transformers без интернета через локальные файлы модели

5 мин—

Заранее сохраняем модель и токенизатор, проверяем local_files_only и HF_HUB_OFFLINE, не обещая работу при отсутствующих весах.

Задача и применимость

Запрос читателя: «как запустить transformers без интернета local_files_only». Ниже разобрана одна воспроизводимая задача на Python и Transformers 4.57.1. Действия относятся к checkpoint distilbert/distilbert-base-uncased-finetuned-sst-2-english, а не ко всем нейросетям с похожим названием. Код не отправляет запросы к админ-панели и не меняет чужие данные. Для первого запуска требуется загрузить модель из Hugging Face Hub; модель может требовать памяти и иметь собственные лицензионные условия. Проверяйте карточку checkpoint до применения к пользовательскому контенту. Демонстрационные предсказания не выдаются здесь за фактически выполненный инференс: в доступной проверке сверены документация и синтаксис Python, но веса модели не запускались.

Факт из документации, на который опирается инструкция: Официальная установка описывает HF_HUB_OFFLINE=1 для отключения HTTP-запросов в Hub и local_files_only=True в from_pretrained. Offline-режим требует заранее загруженных файлов. save_pretrained есть у моделей и токенизаторов; при копировании папки нужны и веса, и конфигурация, и токенизатор. Если версия вашей библиотеки или конфигурация checkpoint отличается, повторите короткий тест перед массовым использованием. Код показывает механизм, а не результат промышленной оценки качества на вашем корпусе.

Порядок действий

  1. На компьютере с доступом к Hub загрузите модель и токенизатор проверенного checkpoint.
  2. Сохраните оба объекта в разрешённую локальную папку и проверьте набор файлов.
  3. Скопируйте папку в изолированную среду с тем же стеком библиотек.
  4. Установите HF_HUB_OFFLINE до старта процесса и загрузите оба объекта с local_files_only=True.
  5. Отключите сеть для приёмочного теста и сравните предсказание на одном контрольном отзыве.

Для установки в отдельном окружении используйте совместимую версию пакета и backend PyTorch: pip install "transformers==4.57.1" torch. Наличие команды не означает, что все веса доступны именно вашей системе или что GPU настроен. Секреты и персональные данные не помещайте в демонстрационные входы. Для быстрой диагностики перед первым большим прогоном проверьте import transformers; print(transformers.__version__).

Готовый шаблон Python

from transformers import AutoModelForSequenceClassification, AutoTokenizer

name = "distilbert/distilbert-base-uncased-finetuned-sst-2-english"
tok = AutoTokenizer.from_pretrained(name)
model = AutoModelForSequenceClassification.from_pretrained(name)
tok.save_pretrained("./review_model")
model.save_pretrained("./review_model")
# На изолированной машине после переноса ./review_model:
offline_tok = AutoTokenizer.from_pretrained("./review_model", local_files_only=True)
offline_model = AutoModelForSequenceClassification.from_pretrained(
    "./review_model", local_files_only=True)
print(offline_tok("The delivery was great.")["input_ids"][:8])
print(offline_model.config.id2label)

Этот шаблон можно перенести в отдельный файл и заменить демонстрационные тексты на обезличенную выборку. Зафиксируйте checkpoint и входные строки, чтобы отличать ошибки подготовки от поведения модели. В серверном сценарии загрузку модели выполняйте один раз при старте службы, а не заново при каждом обращении. Если пример возвращает словарь, используйте проверку наличия ключа перед сохранением его в долговременное хранилище. Сначала воспроизведите малый тест, лишь затем подключайте массовый поток.

Пример входных данных и ожидаемой проверки

Вход — checkpoint с двумя метками и фраза «The delivery was great». Ожидается, что папка ./review_model переносится вместе с весами, конфигурацией и tokenizer; загрузка с local_files_only=True работает без сетевого обращения и печатает начало списка token IDs плюс словарь меток. Само качество классификации оценивают отдельным inference.

Важно различать ожидаемую структуру ответа и непроверенное заранее содержимое нейросетевого предсказания. Если устройство или модель вернули иное значение, не «подгоняйте» скрипт под рассказ статьи. Сохраните фактический вывод, сопоставьте его с контрольным примером и запишите, какой слой дал отличие: вход, токенизация, checkpoint или постобработка. Так тест остается полезным после обновления окружения.

Как принимать решение по реальным данным

Офлайн-режим часто путают с «модель скачает сама при первом обращении на сервере». В изолированной среде загрузка невозможна, если веса или файлы токенизатора не были перенесены заранее. Тестируйте чистую машину без предварительного cache: иначе успешный запуск может случайно использовать старую копию из домашнего каталога. local_files_only=True задавайте и для модели, и для tokenizer; переменная HF_HUB_OFFLINE дополнительно блокирует запросы к Hub. Однако локальность не делает модель безопасной по происхождению: до переноса изучите карточку, лицензию, формат весов и репозиторий. Файлы моделей могут быть большими, поэтому при упаковке проверяйте размер и контрольные суммы, не придумывая оценку в гигабайтах заранее.

Дополнительный тест перед внедрением

Проведите два эксперимента. Первый — удалить доступ к сети и загрузить по локальному пути на чистой машине: приложение должно успешно построить tokenizer и model. Второй — намеренно убрать один необходимый файл из тестовой копии: запуск должен завершиться понятной ошибкой, а не незаметно получить ресурсы извне. При обновлении версии модели копируйте её в новый каталог и сравнивайте контрольные предсказания; не переписывайте рабочую папку до проверки. Если модель подчиняется собственному Python-коду из репозитория, отдельно оценивайте доверие к исполнению кода; для выбранного примера не требуется включать trust_remote_code. Пример сохраняет только модель и токенизатор, а не всё окружение: зависимости и совместимую версию Transformers нужно зафиксировать самостоятельно.

Критерии готовности

  • Загрузка двух объектов проходит при физически отключённой сети.
  • Тест отсутствующего файла завершается ошибкой, а не обращением к Hub.
  • id2label после переноса совпадает с исходным.

Записывайте тестовый результат вместе с ID входа и конфигурацией, но не публикуйте приватные запросы в открытых логах. Ручная разметка небольшой выборки нужна даже тогда, когда код возвращает ответ без ошибок: технически правильная форма не подтверждает полезность предсказания. После изменения модели или библиотеки прогоните тот же набор повторно. Если одно из условий не пройдено, сначала исправляйте причину, затем расширяйте применение.

Типичные ошибки и что не делать

  • Не полагаться на случайно прогретый cache.
  • Не сохранять только веса без токенизатора.
  • Не разрешать trust_remote_code без проверки происхождения кода.

Не путайте демонстрационный вывод с обещанием точности и не подменяйте источники сведений ответом модели. Для автоматического действия с последствиями для человека добавляйте независимую проверку. Изменения языка, объёма текста и домена применения требуют новой оценки качества. В документации производителя описан интерфейс инструмента, но показатели вашей задачи можно узнать только на вашей контрольной выборке.

FAQ

Можно ли включить offline до загрузки?

Нет, файлы необходимо получить заранее.

Что делает HF_HUB_OFFLINE?

Отключает HTTP-обращения к Hub.

Нужен ли локальный tokenizer?

Да, иначе текст нельзя корректно преобразовать во вход модели.

Официальные источники

Частые вопросы

Можно ли включить offline до загрузки?

Нет, файлы необходимо получить заранее.

Что делает HF_HUB_OFFLINE?

Отключает HTTP-обращения к Hub.

Нужен ли локальный tokenizer?

Да, иначе текст нельзя корректно преобразовать во вход модели.

Читайте также

Комментарии

Пока тихо. Скажите первое слово