簡體   English   中英

如何用pipenv安裝PyTorch並保存到Pipfile和Pipfile.lock?

[英]How to install PyTorch with pipenv and save it to Pipfile and Pipfile.lock?

我目前正在使用 Pipenv 維護特定項目中使用的 Python 包。 到目前為止,我嘗試過的大多數下載都按預期運行; 也就是說,我輸入pipenv install [package] ,它會將package安裝到虛擬環境中,然后將package信息記錄到Pipfile和Pipfile.lock中。

但是,我在安裝 PyTorch 時遇到了一些問題。

我試過運行pipenv install torch ,但每次鎖定步驟都失敗。 相反,我嘗試使用 PyTorch 網站直接強制下載

pipenv run pip install torch===1.6.0 torchvision===0.7.0 -f https://download.pytorch.org/whl/torch_stable.html

它實際上安裝了! 如果我運行pipenv graph ,它會同時顯示 torch 和 torchvision 及其依賴項。 但是仍然存在一個問題:torch 和 torchvision 都沒有保存到 Pipfile 和 Pipfile.lock 中。

關於如何實現這一目標的任何想法?

當您使用pipenv run pip install <package> ,會跳過更新 Pipfile 和 Pipfile.lock 的自定義pipenv操作。 它基本上相當於做一個普通的pip install <package> ,就好像你沒有/使用pipenv

更新 Pipfiles 的唯一方法是使用pipenv install

不幸的是,當我發布這個時, pipenv沒有pip-f/--find-links option 的等效項 一種解決方法是手動找到您需要的正確火炬輪 ( .whl ) 鏈接,使用 pytorch,這通常意味着從https://download.pytorch.org/whl/torch_stable.html我將展示下面是如何執行此操作的提示)。

然后,使用特定的包版本和輪子的 URL 創建/修改 Pipfile:

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[requires]
python_version = "3.8"

[packages]
torch = {version = "==1.6.0", file = "https://download.pytorch.org/whl/cpu/torch-1.6.0-cp38-none-macosx_10_9_x86_64.whl"}
torchvision = {version = "==0.7.0", file = "https://download.pytorch.org/whl/torchvision-0.7.0-cp38-cp38-macosx_10_9_x86_64.whl"}

然后只需執行正常的pipenv install

您可以使用pipenv install --verbose確認pipenv install --verbose

Collecting torch==1.6.0
  ...
  Looking up "https://download.pytorch.org/whl/cpu/torch-1.6.0-cp38-none-macosx_10_9_x86_64.whl" in the cache
  Current age based on date: 8
  Starting new HTTPS connection (1): download.pytorch.org:443
  https://download.pytorch.org:443 "GET /whl/cpu/torch-1.6.0-cp38-none-macosx_10_9_x86_64.whl HTTP/1.1" 304 0
  ...
  Added torch==1.6.0 from https://download.pytorch.org/whl/cpu/torch-1.6.0-cp38-none-macosx_10_9_x86_64.whl#egg=torch 
...
Successfully installed torch-1.6.0

Collecting torchvision==0.7.0
  ...
  Looking up "https://download.pytorch.org/whl/torchvision-0.7.0-cp38-cp38-macosx_10_9_x86_64.whl" in the cache
  Current age based on date: 8
  Starting new HTTPS connection (1): download.pytorch.org:443
  https://download.pytorch.org:443 "GET /whl/torchvision-0.7.0-cp38-cp38-macosx_10_9_x86_64.whl HTTP/1.1" 304 0
  ...
  Added torchvision==0.7.0 from https://download.pytorch.org/whl/torchvision-0.7.0-cp38-cp38-macosx_10_9_x86_64.whl#egg=torchvision
...
Successfully installed torchvision-0.7.0

這也會向 Pipfile.lock 添加條目:

"torch": {
    "file": "https://download.pytorch.org/whl/cpu/torch-1.6.0-cp38-none-macosx_10_9_x86_64.whl",
    "hashes": [
        ...
    ],
    "index": "pypi",
    "version": "==1.6.0"
},
"torchvision": {
    "file": "https://download.pytorch.org/whl/torchvision-0.7.0-cp38-cp38-macosx_10_9_x86_64.whl",
    "hashes": [
        ...
    ],
    "index": "pypi",
    "version": "==0.7.0"
}

有了它,您現在就有了一個 Pipfile 和 Pipfile.lock,您可以在開發應用程序時簽入/提交到版本控制和跟蹤/管理。

除了手動編輯 Pipfile,您還可以從命令行執行此操作:

(temp) $ pipenv install --verbose "https://download.pytorch.org/whl/torchvision-0.7.0-cp38-cp38-macosx_10_9_x86_64.whl"
Installing https://download.pytorch.org/whl/torchvision-0.7.0-cp38-cp38-macosx_10_9_x86_64.whl...
...
Adding torchvision to Pipfile's [packages]...
✔ Installation Succeeded

這還應該向 Pipfile 添加一個條目:

[packages]
...
torchvision = {file = "https://download.pytorch.org/whl/torchvision-0.7.0-cp38-cp38-macosx_10_9_x86_64.whl"}

當然,這一切都取決於找出您實際需要哪個輪子。 這可以通過首先使用帶有-f / --find-links選項的普通pip install <package> ,該選項針對https://download.pytorch.org/whl/torch_stable.html URL,然后檢查它使用了哪個輪子.

  1. 首先,讓我們通過pip install獲取正確的.whl文件
    $ pipenv run pip install --verbose torchvision==0.7.0 -f https://download.pytorch.org/whl/torch_stable.html Looking in links: https://download.pytorch.org/whl/torch_stable.html ... Collecting torchvision==0.7.0 Downloading torchvision-0.7.0-cp38-cp38-macosx_10_9_x86_64.whl (387 kB) ...
  2. 從虛擬環境中刪除pip install -ed 的東西
    $ pipenv clean
  3. 重復安裝但使用pipenv install
     $ pipenv install --verbose "https://download.pytorch.org/whl/torchvision-0.7.0-cp38-cp38-macosx_10_9_x86_64.whl"
    • 只需結合步驟 1 中的“https://download.pytorch.org/whl/”+ .whl文件名

首先使用pip install然后將其復制到pipenv似乎有點倒退,但這里的目標是讓pipenv更新 Pipfile 和 Pipfile.lock (以支持確定性構建)並“記錄”您的 env 以進行版本控制。

注意: 這篇文章的最新版本始終位於 Pipenv 項目站點,因為我無法永遠在多個地方維護相同的編輯。


這種技術是正確的,它記錄在這里:

https://pipenv.pypa.io/en/latest/advanced/#specifying-package-indexes

基本上,您將一個新的“源存儲庫”添加到您的 Pipfile。 並且您應該盡可能使用verify_ssl = true來獲得額外的安全性。

無論如何,有一個快捷方式可以在不編輯 pipfile 的情況下添加自定義存儲庫。 --extra-index-url快捷方式表示“添加此 PEP 503 標准 repo URL”:

  • 使用 CUDA 工具包 11.3 的版本,具有 GPU 加速(NVIDIA Ampere (RTX 30x0) GPU 和更高版本需要此工具包):
pipenv install --extra-index-url https://download.pytorch.org/whl/cu113/ "torch==1.10.1+cu113"
  • 使用CUDA Toolkit 10.2的版本,GPU加速:
pipenv install --extra-index-url https://download.pytorch.org/whl/ "torch==1.10.1+cu102"
  • 使用 CPU 的版本:
pipenv install --extra-index-url https://download.pytorch.org/whl/ "torch==1.10.1+cpu"

現在您可能會注意到一件事:我的回購文件名中沒有“.html”。

這是因為帶有 HTML 文件名的回購協議(例如https://download.pytorch.org/whl/torch_stable.html )是只有 pip 可以理解的非標准回購協議。

您不能在 Pipenv 中使用這些 URL。

Pipenv 使用 PEP 503 標准化回購協議。 Torch 在沒有“.html”文件名的 URL 上發布這些內容。 因此,刪除文件名以獲得 Pipenv 使用的正確回購 URL。

這個事實記錄在這里,當 Torch 的團隊決定最終發布 PEP 503 回購協議時: https://github.com/pytorch/pytorch/issues/25639#issuecomment-861707149

您可能會注意到其他事情:我總是使用+cpu+cu113或其他任何方式指定版本。

這是必要的,否則 Pipenv 不知道要安裝哪個版本,也不會獲得 GPU 加速。 “體系結構”(GPU 與 CPU 與不同的 CUDA 工具包)包含在版本號中。 這實際上是 Torch 決定要做的,下載它們的唯一正確方法是指定您想要的確切版本和架構(例如+cu113 )。

如果你想在將來找出 URL 到正確的回購/版本,請執行以下操作:

Go to pytorch.org and select "Stable, Pip, Python, CUDA 11.3" (or whatever is the latest CUDA you may be using), and then the command textbox will reveal the repo URL for the latest CUDA toolkit. 然后您必須刪除 HTML 文件名,因為這是特定於 pip 的回購協議。

訪問生成的 URL,例如https://download.pytorch.org/whl/cu113/ ,然后導航到所需的庫文件夾。 然后搜索您想要的版本,並確保指定其 FULL 版本說明符,例如1.10.1+cu113

哦,有時,Torch 團隊忘記將最新版本上傳到 PEP 503 倉庫,例如現在, 1.10.2可用,但僅在非標准 pip 風格的倉庫中可用。 這就是為什么您應該始終訪問 PEP 503 存儲庫以查看他們上傳到該存儲庫的最新版本。 (如果他們完全停止提供老式的 pip-repo,我會很高興,因為 pip 也支持 PEP 503,所以他們應該專注於符合標准的 repo ...)

在撰寫本文時,請參閱我上面的示例以獲取當前版本的完美安裝說明。

最后一點:始終尊重 TORCH PYTHON 版本。

這些包將具有諸如“cp37”、“cp38”、“cp39”之類的名稱。 在撰寫本文時,他們創建的最高版本是 Python 3.9。 沒有 Python 3.10 版本的 Torch。

因此,它有助於安裝 Pyenv 並通過pipenv install --python=3.9在 Pipenv 中指定確切的 Python 版本,以確保您擁有 Torch 支持的最新版本,而不是任何“太新/不受支持”的版本。 :)

您可以通過將 PyTorch 源添加到您的 pip 文件來安裝它,如下所示:

[[source]]
name = "pytorch"
url = "https://download.pytorch.org/whl/torch_stable.html"
verify_ssl = false

[packages]
torch = {index = "pytorch",version = "==1.9.0"}
torchvision = {index ="pytorch", version= "==0.10.0"}
torchaudio = {index ="pytorch", version= "==0.9.0"}

[requires]
python_version = "3.7"

然后運行pipenv install

注意:索引是指源名稱。

您可以在任何類似情況下執行此操作:例如:安裝 pytorch-geometric:

[[source]]
name = "pytorch-geometric"
url = "https://pytorch-geometric.com/whl/torch-1.9.0+cu111.html"
verify_ssl = false
[packages]

torch-scatter = {index= "pytorch-geometric", version= "==2.0.7"}
torch-sparse = {index= "pytorch-geometric", version= "==0.6.10"}
torch-cluster = {index= "pytorch-geometric", version= "==1.5.9"}
torch-geometric = {index= "pytorch-geometric", version= "==1.3.2"}

Gino Mempin 的解決方案對我有用(我只需將 url 稍微更改為“https://download.pytorch.org/whl/cpu/”,因此添加“cpu/”)。 然后我嘗試了以下方法,它也能正常工作,而且更容易 imo,您無需指定版本。

文件:

...
[[source]]
url = "https://download.pytorch.org/whl/cpu/"
verify_ssl = false
name = "pytorch"

[packages]
torch = {index = "pytorch", version = "*"}
...

然后只需pipenv update

這是針對pytorch的cpu版本; 還有另一個文件夾“https://download.pytorch.org/whl/cu80/”,我認為它對於 cuda 版本的工作方式類似。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM