Добавить в корзинуПозвонить
Найти в Дзене

Особенности установки TORCH-CUDA на UV через TOML-файл и о самом TOML-файле

Примечание: Помните, что под Windows пакет Torch-CUDA для 3.13 версии питона ЕЩЕ НЕТ ВЫШЕЛ!!! Во избежание ошибок и путаниц в питонах первой командой (если у вас система еще не стояла) сделайте: Файл конфигурации UV поддерживает постоянные файлы конфигурации формата TOML как на уровне проекта, так и на уровне пользователя. Файл уровня проекта называется 'pyproject.toml' Перед началом работы с каким-то проектом (да и просто "для понимания структуры" проекта), стоит начинать всегда с: Можете посмотреть содержимое этих файлов, что-то изменить в них, или просто удалить, потом, при необходимости, вновь создать их той же командой. UV будет искать "pyproject.toml" и "uv.toml" файлы в текущем каталоге или в ближайшем родительском каталоге. Если вы после "uv init" дадите еще и команду ‘uv sync’ или 'uv run', то тут же будет создано и ".venv" в соответствии с параметрами из файла конфигурации. Если перед этим вы заполните параметр "dependencies", то все пакеты, перечисленные в нем, будут усnан
Оглавление
Примечание:
Помните, что под Windows пакет Torch-CUDA для 3.13 версии питона ЕЩЕ НЕТ ВЫШЕЛ!!!

Во избежание ошибок и путаниц в питонах первой командой (если у вас система еще не стояла) сделайте:

  • uv python install 3.12

Файл конфигурации

UV поддерживает постоянные файлы конфигурации формата TOML как на уровне проекта, так и на уровне пользователя.

Файл уровня проекта называется 'pyproject.toml'

Перед началом работы с каким-то проектом (да и просто "для понимания структуры" проекта), стоит начинать всегда с:

  • создания нового каталога с именем проекта
  • дать команду "uv init" в этом каталоге
  • UV создаст все необходимые ему (и не только ему) файлы, в том числе и файл "pyproject.toml" и заполнит эти файлы начальной информацией.

Можете посмотреть содержимое этих файлов, что-то изменить в них, или просто удалить, потом, при необходимости, вновь создать их той же командой.

-2
-3

UV будет искать "pyproject.toml" и "uv.toml" файлы в текущем каталоге или в ближайшем родительском каталоге.

Если вы после "uv init" дадите еще и команду ‘uv sync’ или 'uv run', то тут же будет создано и ".venv" в соответствии с параметрами из файла конфигурации.

Если перед этим вы заполните параметр "dependencies", то все пакеты, перечисленные в нем, будут усnановлены в ".venv" и набор пакетов, перечисленный в этом разделе, ВСЕГДА будет обновляться пред стартом приложения, работающего на этом ".venv"

Если вы сюда что-то добавите, оно установится, если что-то удалите, оно удалится из ".venv" перед стартом.

Вы можете вообще удалить VENV, оно моментально будет воссоздано перед стартом приложения из этого TOML-файла.

Пример записи пакетов, которые надо установить
Пример записи пакетов, которые надо установить

Установка PyTorch (TORCH-CUDA)

(полный текст pyproject.toml смотри в конце раздела)

С точки зрения установки PyTorch имеет несколько необычных характеристик:

  • Многие пакеты PyTorch размещены на отдельном индексе, а не на Python Package Index (PyPI). Таким образом, установка PyTorch часто требует настройки проекта для использования индекса PyTorch.
  • PyTorch создает отдельные сборки для каждого типа процессора (например, CPU-only, CUDA). Поскольку не существует стандартизированного механизма для указания этих пакетов при публикации или установке, PyTorch кодирует их в локальном спецификаторе версии. Поэтому версии PyTorch будут выглядеть как 2.5.1+cpu, 2.5.1+cu121и т. д.
  • Сборки для разных процессоров публикуются в разных индексах. Например, +cpu сборки публикуются на https://download.pytorch.org/whl/cpu , а +cu121сборки публикуются на https://download.pytorch.org/whl/cu121 .

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

Для начала рассмотрим следующую (стандартную) конфигурацию, которая будет создана путем запуска uv init --python 3.12 с последующим запуском

  • uv add torch torchvision

В этом случае PyTorch будет установлен из PyPI, который размещает CPU-версии для Windows и macOS, а также GPU-версии для Linux (ориентированные на CUDA 12.4):

[project]
name = "project"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
"torch>=2.5.1",
"torchvision>=0.20.1"
]

Это допустимая конфигурация для проектов, которые хотят использовать сборки ЦП на Windows и macOS, а также сборки с поддержкой CUDA на Linux. Однако, если вам нужна поддержка различных платформ или процессоров, вам нужно будет настроить проект соответствующим образом.

Использование экстра-индекса PyTorch

В некоторых случаях вы можете захотеть использовать определенный вариант PyTorch на всех платформах. Например, вы можете захотеть использовать сборки CPU-only и на Linux.

В таких случаях первым шагом будет добавление соответствующего индекса PyTorch в ваш "pyproject.toml":

Только CPU

[[tool.uv.index]]
name = "pytorch-cpu"
url = "https://download.pytorch.org/whl/cpu"
explicit = true

CUDA 11.8

[[tool.uv.index]]
name = "pytorch-cu118"
url = "https://download.pytorch.org/whl/cu118"
explicit = true

CUDA 12.1

[[tool.uv.index]]
name = "pytorch-cu121"
url = "https://download.pytorch.org/whl/cu121"
explicit = true

CUDA 12.4

[[tool.uv.index]]
name = "pytorch-cu124"
url = "https://download.pytorch.org/whl/cu124"
explicit = true

Рекомендуется использовать , "explicit = true" чтобы гарантировать, что индекс используется только для torch, torchvisionи других пакетов, связанных с PyTorch, в отличие от общих зависимостей, таких как "jinja2", которые должны по-прежнему получаться из индекса по умолчанию (PyPI).

Следует обновить в "pyproject.toml" точку перехода torch и torchvision на нужный экстра-индекс:

Только PCU

[tool.uv.sources]
torch = [
{ index = "pytorch-cpu" },
]
torchvision = [
{ index = "pytorch-cpu" }
]

PyTorch не публикует сборки CUDA для macOS. Таким образом, мы включаем platform_system команду uv игнорировать индекс PyTorch при разрешении для macOS:

CUDA 12.4

[tool.uv.sources]
torch = [
{ index = "pytorch-cu124", marker = "platform_system != 'Darwin'"},
]
torchvision = [
{ index = "pytorch-cu124", marker = "platform_system != 'Darwin'"}
]

В качестве полного примера, следующий проект будет использовать сборки PyTorch, предназначенные только для ЦП, на всех платформах:

[project]
name = "project"
version = "0.1.0"
requires-python = ">=3.12.0"
dependencies = [
"torch>=2.5.1",
"torchvision>=0.20.1"
]
[tool.uv.sources]
torch = [
{ index = "pytorch-cpu" },
]
torchvision = [
{ index = "pytorch-cpu" }
]
[[tool.uv.index]]
name = "pytorch-cpu"
url = "https://download.pytorch.org/whl/cpu"
explicit = true

В некоторых случаях вам может потребоваться использовать сборки только с использованием CPU в одной среде (например, macOS и Windows), а сборки с поддержкой CUDA — в другой (например, Linux).

С помощью tool.uv.sources можно использовать маркеры окружения, чтобы указать нужный индекс для каждой платформы. Например, следующая конфигурация будет использовать сборки PyTorch только для CPU в Windows (и macOS, путем возврата к PyPI), а также сборки с поддержкой CUDA в Linux:

[project]
name = "project"
version = "0.1.0"
requires-python = ">=3.12.0"
dependencies = [
"torch>=2.5.1",
"torchvision>=0.20.1",
]
[tool.uv.sources]
torch = [
{ index = "pytorch-cpu", marker = "platform_system == 'Windows'" },
{ index = "pytorch-cu124", marker = "platform_system == 'Linux'" },
]
torchvision = [
{ index = "pytorch-cpu", marker = "platform_system == 'Windows'" },
{ index = "pytorch-cu124", marker = "platform_system == 'Linux'" },
]
[[tool.uv.index]]
name = "pytorch-cpu"
url = "https://download.pytorch.org/whl/cpu"
explicit = true
[[tool.uv.index]]
name = "pytorch-cu124"
url = "https://download.pytorch.org/whl/cu124"
explicit = true

В некоторых случаях вам может потребоваться использовать сборки только для ЦП, а в других — сборки с поддержкой CUDA, причем выбор переключается с помощью предоставленного пользователем дополнительного параметра (например, uv sync --extra cpuвместо uv sync --extra cu124).

С помощью tool.uv.sources можно использовать дополнительные маркеры для указания нужного индекса для каждого включенного дополнительного пакета. Например, следующая конфигурация будет использовать CPU-only PyTorch для uv sync --extra cpuи сборки с поддержкой CUDA для uv sync --extra cu124:

[project]
name = "project"
version = "0.1.0"
requires-python = ">=3.12.0"
dependencies = []
[project.optional-dependencies]
cpu = [
"torch>=2.5.1",
"torchvision>=0.20.1",
]
cu124 = [
"torch>=2.5.1",
"torchvision>=0.20.1",
]
[tool.uv]
conflicts = [
[
{ extra = "cpu" },
{ extra = "cu124" },
],
]
[tool.uv.sources]
torch = [
{ index = "pytorch-cpu", extra = "cpu" },
{ index = "pytorch-cu124", extra = "cu124" },
]
torchvision = [
{ index = "pytorch-cpu", extra = "cpu" },
{ index = "pytorch-cu124", extra = "cu124" },
]
[[tool.uv.index]]
name = "pytorch-cpu"
url = "https://download.pytorch.org/whl/cpu"
explicit = true
[[tool.uv.index]]
name = "pytorch-cu124"
url = "https://download.pytorch.org/whl/cu124"
explicit = true

Полный текст pyproject.toml для установки TORCH-CUDA приведен на скриншоте ниже:

-5

Можете просто скопировать эти разделы отсюда:

[project]
name = "MyName"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"torch",
"torchvision",
"torchaudio"
]
[[tool.uv.index]]
name = "pytorch-cu124"
url = "https://download.pytorch.org/whl/cu124"
explicit = true
[tool.uv.sources]
torch = [
{ index = "pytorch-cu124", marker = "platform_system != 'Darwin'"},
]
torchvision = [
{ index = "pytorch-cu124", marker = "platform_system != 'Darwin'"},
]
torchaudio = [
{ index = "pytorch-cu124", marker = "platform_system != 'Darwin'"},
]

Все это касается создания VENV с использованием pyproject.toml файла.

Синхронизация VENV с пакетами из TOML-файла (если что-то поломалось или удалилось) восстановление пакетов делается по команде:

  • uv sync

... все несоответствия реальных пакетов и пакетов в TOML-файле будут убраны и восстановлено то, что в TOML-файле описано. Если удалено само VENV, оно будет восстановлено.

При этом никто не отменял использование обычной установки через команду:

uv pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
Примечание
Всегда проверяйте наличие 'uv.lock' файла в текущем каталоге.
Если требуется переустановка с какими то изменениями, удаляйте перед ней этот файл, иначе информация будет взята из него!!! Я сталкивался с такими случаями!

Больше информации о формате TOML-файла проекта читай тут:

https://packaging.python.org/en/latest/guides/writing-pyproject-toml

=============================================

Пример:

Разберем установку TORCH-CUDA c помощью TOML-файла через UV RUN

1. Создаем новый каталог, делаем его текущим и запускаем из него терминал

2. Кидаем в каталог вот этот файл (скачать) https://github.com/Nestorchik/Dzen/releases/download/dzen/pyproject.toml

3. Даем команду:

  • uv run

... uv обнаружит файл 'pyproject.toml' , создаст окружение '.venv' и начнет у него установку 'torch-cuda', во время которой создаст LOCK-файл.

Примечание
TORCH первый раз может очень долго закачиваться.
-6

Видео установки ComfyUI через TOML-файл UV

-7