А АWednesday, 1 January 2025

Переносим кэш Python.

Всем привет. 

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

Часто полагают, что проблема именно в самой генераторе, и что он непомерно "жрёт" дисковое пространство, но это не совсем так, большую часть места "съедает" кэш самого Python и устанавливаемые зависимости, коих для корректной работы любой нейросети используется достаточно большое количество. И в процессе, вы, поиграв с одной нейросетью, и даже удалив её и поставив другую в недоумении смотрите на цифры и не понимаете, куда же сегодня делось еще 10 Гб с диска "С".

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

Лично я рекомендую использовать ВСЕ способы ВМЕСТЕ если вы пользуетесь портабельными версиями ИИ-генераторов. Ибо далеко не каждый генератор портабелен на все 100% и свой кэш может легко забрасывать на ваш системный диск. Особенно этим грешат сборки Spaces.

Способ 1. 

Измените переменную среды ТЕМР в своей ОС. Да, да, это банально, но частенько мы забываем что по умолчанию пользовательская "времянка" в Windows тоже указывает на системный диск.

Чтобы настроить переменные среды, нажмите правой кнопки мыши на Мой Компьютер - Свойства - Дополнительные параметры системы - в окне "Свойства системы" нажмите "Переменные среды". Нажмите на переменную, которую вы хотите изменить, нажмите "Изменить".

Способ 2. 

Задайте, или измените если она существует, переменную среды PIP_CACHE_DIR в своей ОС. После этого все операции установки пакетов с использованием PlP будут использовать указанную директорию для хранения кэша. Шаги те же что и в 1-м способе.

Способ 3. 

Задайте, или измените если она существует, переменную среды XDG_CACHE_HOME в своей ОС. Это наследие Linux с которым теперь приходиться сражаться и в Windows. Переменная XDG_CACHE_HOME является стандартом из XDG Base Directory Specification, который происходит из Linux-среды. Однако многие библиотеки Python, независимо от операционной системы (включая Windows), поддерживают эту переменную среды как способ определения места хранения кэша.

Способ 4. 

Задайте, или измените если он существует, глобальный кэш для PIP. Откройте командную строку прописав в ней команду:

..\python_embeded\python.exe -m pip config list

или

..\python_embeded\python.exe -m pip config get global.download-cache

..\python_embeded\python.exe -m pip config get global.cache-dir

В моем случае я использую Python из портабельной версии ComfyUI, но вы можете использовать свой вариант. 

В ответ я получу две строки:

D:\tmp\Cache

D:\tmp\Cache

Т.е. у меня настроена директория "D:\tmp\Cache" куда Python должен направлять свой кэш и кэш всех устанавливаемых зависимостей.

Если у вас оба раза пустой ответ, то перейдите в директорию

C:\Users\Username\AppData\Roaming

и если вы там не обнаружили папку pip или файл pip.ini внутри неё то просто создайте и папку и файл pip.ini. Отредактируйте pip.ini с помощью notepad,  добавьте такой код:

[global]

no-cache-dir = false

download-cache = D:\tmp\Cache

cache-dir = D:\tmp\Cache

Теперь вы можете удалить файлы из кэша pip предварительно скопировав уже имеющиеся файлы в только что созданную директорию из папки C:\Users\Username\.cache\ так как все установки будут использовать путь указанный в pip.ini.

Кстати, загляните в 

C:\Users\Username\Local Settings\pip\cache\

и если такая папка не пуста, то значит какой-то ИИ-генератор вас все еще не слушается.

Как устанавливать пакеты без кэширования загруженных файлов я описывать здесь не буду по той причине что я так не поступаю.

Кстати, если вам очень захотелось удалить кэш правильно, то используйте команду pip cache purge. На свой страх и риск! В ней есть смысл если у вас только один Python на всю Windows. Команда pip cache purge удаляет все файлы из кэша pip, включая загруженные и установленные пакеты. Кэш pip может содержать ранее загруженные пакеты, их версии, и другие временные файлы. Однако, следует быть осторожным при использовании этой команды, поскольку она удалит все файлы из кэша, включая установленные пакеты, и придется заново загружать или устанавливать их. Перед использованием команды pip cache purge важно понимать, готовы ли вы переустановить все пакеты.

Способ 5. 

Помните что каждый ИИ-генератор типа  ComfyUI, Automatic1111, Forge, Fooocus, SDFX, SwarmUI и т.п. имеет у себя разные настройки относительно кэша Python. 

Например, в популярной сборке Stability Matrix переменные PIP_CACHE_DIR и XDG_CACHE_HOME  можно прописать прямо в ее GUI.


А известный Automatic1111 имеет pip\cache в своей основной директории. Его чистят вот так:

for /d %%i in (tmp\tmp*,tmp\pip*,tmp\gradio\*) do rd /s /q "%%i" 2>nul || ("%%i" && exit /b 1) & del /q tmp\tmp* > nul 2>&1 & rd /s /q pip\cache 2>nul

Если вы используете Fooocus, то вам следует в файле run.bat дописать следующий аргумент запуска:

--cache-path D:\tmp\Cache

И так далее.

Хочу подчеркнуть, что описанные выше методы не являются универсальным решением проблемы нехватки места на диске "С". К сожалению, все файлы кэша и другие файлы не могут быть полностью перенесены на другой диск, и некоторые из них все равно останутся на вашем системном диске. Ведь разработчика любого ИИ-генератора такие проблемы беспокоят не часто.

Удачи.

No comments:

Post a Comment

А что вы думаете по этому поводу?

Версия на печать

Популярное