Как изменить каталог кеша по умолчанию 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. Вы можете изменить переменные среды оболочки, показанные ниже, в порядке приоритета, чтобы указать другой каталог кэша:
- Переменная среды оболочки (по умолчанию): TRANSFORMERS_CACHE.
- Переменная среды оболочки: HF_HOME + transforms/.
- Переменная среды оболочки: 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>