Как изменить каталог кеша по умолчанию huggingface transformers

В каталоге кеша по умолчанию недостаточно места на диске, мне нужно изменить конфигурацию каталога кеша по умолчанию.

6 ответов

Решение

Вы можете указывать каталог кеша каждый раз, когда загружаете модель с помощью .from_pretrained, установив параметрcache_dir. Вы можете определить местоположение по умолчанию, экспортируя переменную среды TRANSFORMERS_CACHE каждый раз перед использованием (т.е. перед ее импортом!) Библиотекой).

Пример для питона:

import os
os.environ['TRANSFORMERS_CACHE'] = '/blabla/cache/'

Пример для bash:

export TRANSFORMERS_CACHE=/blabla/cache/

Как упоминал @cronoik, альтернативу изменению пути кеша в терминале вы можете изменить каталог кеша прямо в своем коде. Я просто предоставлю вам реальный код, если у вас возникнут трудности с поиском его в HuggingFace:

tokenizer = AutoTokenizer.from_pretrained("roberta-base", cache_dir="new_cache_dir/")

model = AutoModelForMaskedLM.from_pretrained("roberta-base", cache_dir="new_cache_dir/")

Я пишу этот ответ, потому что есть другие каталоги кеша Hugging Face, которые также занимают место в домашнем каталоге, помимо кеша модели, и предыдущие ответы и комментарии не прояснили это.

Документация Transformers описывает , как определяется каталог кэша по умолчанию:

Настройка кэша

Предварительно обученные модели загружаются и кэшируются локально по адресу: ~/.cache/huggingface/transformers/. Это каталог по умолчанию, заданный переменной среды оболочки TRANSFORMERS_CACHE. В Windows каталогом по умолчанию является C:\Users\username.cache\huggingface\transformers. Вы можете изменить переменные среды оболочки, показанные ниже, в порядке приоритета, чтобы указать другой каталог кэша:

  1. Переменная среды оболочки (по умолчанию): TRANSFORMERS_CACHE.
  2. Переменная среды оболочки: HF_HOME + transforms/.
  3. Переменная среды оболочки: XDG_CACHE_HOME + /huggingface/transformers.

Что в этой части документации явно не упоминается, так это то, что HF_HOME по умолчанию имеет значение $XDG_CACHE_HOME/huggingface и используется для других кешей Huggingface, например кеша наборов данных, который отделен от кеша преобразователей. Значение XDG_CACHE_HOME зависит от машины, но обычно это $HOME/.cache (и HF по умолчанию использует это значение, если XDG_CACHE_HOME не установлен) - таким образом, обычное значение по умолчанию $HOME/.cache/huggingface

Таким образом, вы, вероятно, захотите установить переменную среды HF_HOME (и, возможно, установить символическую ссылку для выявления случаев, когда переменная среды не установлена).

      export HF_HOME=/path/to/cache/directory

Эта переменная среды также учитывается библиотекой наборов данных Hugging Face, хотя в документации это явно не указано.

Обычно вы хотите хранить наборы данных и кэши моделей дольше, а другие вещи — нет. Кроме того, эти вещи большие, и вам может не понадобиться хранить их в домашней папке.

Итак, допустим, вы создаете каталог\my_drive\hfгде вы хотите, чтобы HuggingFace все кэшировал. Вы можете создать следующие переменные среды:

      export HF_HOME=\my_drive\hf\misc
export HF_DATASETS_CACHE=\my_drive\hf\datasets
export TRANSFORMERS_CACHE=\my_drive\hf\models

Теперь вам будет легче убирать ненужные вещи.

Обратите внимание, что это, по сути, расположение кеша всех вещей в Hub, но выше вы отделяете кеш наборов данных и моделей. XDG_CACHE_HOMEне используется, если установлен. Если это не было установлено, как указано выше, тогдаHF_HOMEпо умолчанию$XDG_CACHE_HOME/huggingface.

Дополнительная информация: https://huggingface.co/docs/huggingface_hub/package_reference/environment_variables .

Обычно я настраиваю и модифицирую свой вариант тремя способами:

1. Установка глобальной переменной среды.

      export TRANSFORMERS_CACHE=/path/to/my/cache/directory

2. Установка переменной окружения в коде

      import os
from transformers import AutoModel

# Set the new cache directory
os.environ["TRANSFORMERS_CACHE"] = "/path/to/my/cache/directory"

# This directory will now be used as the cache
model = AutoModel.from_pretrained("bert-base-uncased")

Этот метод влияет только на текущий запущенный скрипт Python.

3. Прохождение cache_dirкак параметр

      from transformers import AutoModel, AutoConfig

# Set the cache directory
cache_dir = "/path/to/my/cache/directory"

# Load the model using the specified cache directory
config = AutoConfig.from_pretrained("bert-base-uncased", cache_dir=cache_dir)
model = AutoModel.from_pretrained("bert-base-uncased", config=config, cache_dir=cache_dir)

Этот метод позволяет вам установить каталог кэша для конкретных моделей или конфигураций, не затрагивая глобальные переменные среды.

Создайте на своем хост-компьютере каталог, доступный для записи, и смонтируйте этот каталог в/app/cacheэто каталог в контейнере

      mkdir ~/my_cache

docker run -v ~/my_cache:/app/cache -e TRANSFORMERS_CACHE="/app/cache <image_name>
Другие вопросы по тегам