#21670·uv

处理依赖于架构的环境的最佳方法

作者: saydemr创建于 2026年9月14日更新于 2026年9月17日
标签question

问题

我有一个依赖于图书馆的项目,比如火炬和Jax,需要根据它们使用的加速器安装不同的包. 虽然这在开发中不是一个问题,但当我向一个混合GPU集群提交一个任务时,环境需要有一个正确的软件包作为代码运行的硬件(例如:火炬-cuda或火炬-rocm). 因此,我编写了以下pyproject.toml'文件,并确定rocm'和`cuda'包是相互排斥的:

[项目]
名称=“新项目”
版本 = "0.1.0" 。
说明=“desc”
需要- Python = “\\3.14”
依赖=[
"joxtyping = 0.2","[JXtyping = 0.2],"[JXtyping = 0.
"Scipy QQ 1.14","Scipy ~"1 14.
"numpy" == 2.1","num" (中文(简体) ).
"贾斯利布",
[ . ]

# 作为额外硬件目标
[项目.可选的依赖性]
rocm=[
"torch->= 2.13.0,<2.14,","
"扭曲",
"特里通罗克姆"
"jax[rocm7-local]","(英语:Jax [rocm7-local])".
[ . ]
cuda=[
"torch->= 2.13.0,<2.14,","
"扭曲",
"特里顿",
"Jax[cuda13] \\"0.4,",
[ . ]

{\fn方正粗倩简体\fs12\an8\1cHFFFF00\b0}我们互相排斥
[工具.uv]
冲突=[
[
{额外="rocm"},
{额外="库达"},
[
[ . ]

[[工具.uv.index]]]
名称="pytorch-cuda"
url="https://download.pytorch.org/whl/cu132" (中文(简体) ).
明确=真实

[[工具.uv.index]]]
名称 = "pytorch-rocm"
url = "https://download.pytorch.org/whl/rocm7.2".
明确=真实

[工具.uv. sources] (英语).
火炬 = [
{索引="pytorch-cuda",外加="cuda"},
{指数="pytorch-rocm", extra="rocm"},
[ . ]
火炬视觉=[
{索引="pytorch-cuda",外加="cuda"},
{指数="pytorch-rocm", extra="rocm"},
[ . ]
triton-rocm={指数="pytorch-rocm",外加="rocm").

当向集群提交 sbatch 文件时, 我使用 :

如果 Ispci QQ- grep -qi "NVIDIA"; 然后模块加载 CUDA; 其他模块加载 rocm; fi
如果nvidia-smi > /dev/null 2>&1;那么
uv 同步 -- extra Cuda
elif rocminfo > /dev/null 2>&1;然后
uv 同步 -- 外弧度
其他情况
自动同步
无

乱跑...

这样可以检测代码运行的架构,并在运行前安装适当的软件包. 然而,当我向队列提交多个任务时,这造成问题,有些任务会前往AMD GPU,有些则会前往NVIDIA GPU,因为"uv同步"命令会改变".venv"内部的文件.

所以,我想知道,在一个项目中是否有一种方法使用多“.venv”环境,或者有一个虚拟环境,一些软件包根据代码运行的硬件指示不同的文件?

敬请 阿卜杜拉

+++ 平台

Linux 5.14.0-611.34.el9 7.x86 64 x86 64 GNU/Linux (英语).

翻译:

uv 4.12.12 (x86 64-unknown-linux-gnu) (中文(简体) )