XnneHang

XnneHang

github
steam_profiles
douban

[tool.uv.index] 使用 uv 配置依賴於 Pytorch 的 pyproject 並單獨配置針對cpu或cuda版本.

參考:#

ps . uv 官方真的太貼心了,這是餵飯級的,把各種cpu,cu11,cu12,intel gpu... 的基礎配置都寫出來了。

我印象裡面看到poetry用戶在安裝的時候考慮用指定 whl 路徑的方法,但是存在很大局限性,因為 whl 是鎖死 python 版本和系統的。

Installing a specific PyTorch build (f/e CPU-only) with Poetry

問題描述:#

正常情況下,我們使用 uv add torch==2.1.0時,安裝的是 cpu+cuda 版本的 torch:

xnne@xnne-PC:~/code/Auto_Caption_Generated_Offline$ uv add torch==2.1.0 torchaudio==2.1.0
 nvidia-cusparse-cu12==12.1.0.106         ^C
首先,請考慮以下(默認)配置,運行 uv init --python 3.12 後再運行 uv add torch torchvision 即可生成該配置。
在這種情況下,可以從 PyPI 安裝 PyTorch,PyTorch 在 Windows 和 macOS 上只支持 CPU 驅動輪,在 Linux 上支持 GPU 加速驅動輪(針對 CUDA 12.4):
[project]
name = "project"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
  "torch>=2.6.0",
  "torchvision>=0.21.0",
]

這有時候並不是我們想要的,比如我的 deepin 上面沒有裝 nvidia 的驅動,那麼我下了 3~4G 的環境我壓根用不到。

我嘗試用uv add torch==2.1.0+cpu -f https://download.pytorch.org/whl/torch_stable.html

xnne@xnne-PC:~/code/Auto_Caption_Generated_Offline$ uv add torch==2.1.0+cpu -f https://download.pytorch.org/whl/torch_stable.html
 
Resolved 63 packages in 10.37s
      Built auto-caption-generate-offline @ fil
 Preparing packages... (4/5)
torch      ------------------------------ 19.06 MiB/176.29 MiB

它確實下載到了 cpu 版本的 torch,但是,在我嘗試從我的遠程倉庫安裝時,我碰到了問題:

xnne@xnne-PC:~/code/test/Auto_Caption_Generated_Offline$ uv pip install git+https://github.com/MrXnneHang/[email protected]
    Updated https://github.com/MrXnneHang/Auto_Caption_Generated_Offline (12065e01ec1dc11f8f224fbb132cfd1c18ec3ac1)
  × No solution found when resolving dependencies:
  ╰─▶ Because there is no version of torch==2.1.0+cpu and auto-caption-generate-offline==2.4.0 depends on torch==2.1.0+cpu, we can conclude that auto-caption-generate-offline==2.4.0 cannot be used.
      And because only auto-caption-generate-offline==2.4.0 is available and you require auto-caption-generate-offline, we can conclude that your requirements are unsatisfiable.

原因:#

原因是 pytorch 上傳的鏡像並不在 pypi 的 index 上。

從包裝的角度來看,PyTorch 有幾個不同尋常的特點:
許多 PyTorch 轮子托管在專用索引上,而不是 Python 包索引 (PyPI)。因此,安裝 PyTorch 通常需要將項目配置為使用 PyTorch 索引。
PyTorch 會為每種加速器(如純 CPU、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 上。

解決:#

最後我自己敲定的相關配置是這樣的:

dependencies = [
    "funasr==1.2.4",
    "pyaml==25.1.0",
    "torch==2.1.0",
    "torchaudio==2.1.0",
]

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

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

之後我們 uv lock, 然後 push 上去。

ps: 如果在配置 cuda 版本的時候,我們應該考慮使用 previous 版本的 cuda,比如使用 11.8. 而不是使用最新的 12.x 甚至 13.x 因為用戶的驅動不會一直是最新的,而新的驅動是兼容舊的 cu 版本的。除非在性能上有非常高的提升,但是一般來說是沒有太大區別的。

從 github 上安裝:#

最終成功安裝了 =-=。

xnne@xnne-PC:~/code/test/Auto_Caption_Generated_Offline$ uv venv -p 3.10 --seed
Using CPython 3.10.16
Creating virtual environment with seed packages at: .venv
 + pip==25.0.1
 + setuptools==75.8.2
 + wheel==0.45.1

xnne@xnne-PC:~/code/test/Auto_Caption_Generated_Offline$ uv pip install git+https://github.com/MrXnneHang/[email protected]
Resolved 63 packages in 5.85s
Prepared 2 packages in 11m 45s
...
 + torch==2.1.0+cpu
 + torch-complex==0.4.4
 + torchaudio==2.1.0+cpu
 + tqdm==4.67.1
...
...

不過在運行的時候 torch 的 numpy 和 funasr 的 numpy 出現了一點衝突:

xnne@xnne-PC:~/code/test/Auto_Caption_Generated_Offline$ uv run test-ACGO
      Built auto-caption-generate-offline @ file:///home/xnne/code/test/Auto_Caption_Generated_Offline
Uninstalled 1 package in 0.57ms
Installed 1 package in 0.95ms

A module that was compiled using NumPy 1.x cannot be run in
NumPy 2.1.3 as it may crash. To support both 1.x and 2.x
versions of NumPy, modules must be compiled with NumPy 2.0.
Some module may need to rebuild instead e.g. with 'pybind11>=2.12'.

If you are a user of the module, the easiest solution will be to  
downgrade to 'numpy<2' or try to upgrade the affected module.
We expect that some modules will need time to support NumPy 2.

Traceback (most recent call last):  File "/home/xnne/code/test/Auto_Caption_Generated_Offline/.venv/bin/test-ACGO", line 4, in <module>
    from uiya.test import main
  File "/home/xnne/code/test/Auto_Caption_Generated_Offline/src/uiya/test.py", line 1, in <module>
    import funasr

手動降級到1.26.4後解決。

uv add numpy==1.26.4
uv lock
xnne@xnne-PC:~/code/test$ uv venv -p 3.10 --seed 
Using CPython 3.10.16
Creating virtual environment with seed packages at: .venv
 + pip==25.0.1
 + setuptools==75.8.2
 + wheel==0.45.1
Activate with: source .venv/bin/activate

xnne@xnne-PC:~/code/test$ uv pip install git+https://github.com/MrXnneHang/[email protected]
Resolved 63 packages in 7.90s
Prepared 2 packages in 603ms
Installed 63 packages in 259ms
 + aliyun-python-sdk-core==2.16.0
 + aliyun-python-sdk-kms==2.16.5
 + antlr4-python3-runtime==4.9.3
 + audioread==3.0.1
 + auto-caption-generate-offline==2.4.0 (from git+https://github.com/MrXnneHang/Auto_Caption_Generated_Offline@5f03a04ebdbe4b7a1329302b551e58092e8af9ee)
 ...
 + torch==2.1.0+cpu
 + torch-complex==0.4.4
 + torchaudio==2.1.0+cpu
 + tqdm==4.67.1
 ...

xnne@xnne-PC:~/code/test$ uv run test-ACGO
funasr:1.2.4
torch:2.1.0+cpu
torchaudio:2.1.0+cpu

烏龍#

中間還有一個小烏龍。就是我在項目目錄下,運行uv pip install->uv run, 而我目錄下存在 pyproject.toml 和 uv.lock, 那麼運行的肯定不是我安裝的那個,而是我根據我項目中 pyproject.toml 生成的版本。於是乎我也就陷入了一個沒有更新代碼,uv run一直報原來的 bug 的問題。git pull 後解決。

所以,如果git pull了,就不用uv pip install git+了。直接uv run即可。

如果之後 cuda 版本我遇到問題可能會再次補充。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。