Примечание:
Помните, что под Windows пакет Torch-CUDA для 3.13 версии питона ЕЩЕ НЕТ ВЫШЕЛ!!!
Во избежание ошибок и путаниц в питонах первой командой (если у вас система еще не стояла) сделайте:
- uv python install 3.12
Файл конфигурации
UV поддерживает постоянные файлы конфигурации формата TOML как на уровне проекта, так и на уровне пользователя.
Файл уровня проекта называется 'pyproject.toml'
Перед началом работы с каким-то проектом (да и просто "для понимания структуры" проекта), стоит начинать всегда с:
- создания нового каталога с именем проекта
- дать команду "uv init" в этом каталоге
- UV создаст все необходимые ему (и не только ему) файлы, в том числе и файл "pyproject.toml" и заполнит эти файлы начальной информацией.
Можете посмотреть содержимое этих файлов, что-то изменить в них, или просто удалить, потом, при необходимости, вновь создать их той же командой.
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 приведен на скриншоте ниже:
Можете просто скопировать эти разделы отсюда:
[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 первый раз может очень долго закачиваться.