Seu*_*eub 163 python machine-learning package conda python-poetry
使用 Conda + Poetry 进行机器学习项目有意义吗?让我分享一下我(新手)的理解,请指正或赐教:
据我了解,Conda和Poetry有不同的目的,但很大程度上是多余的:
我的想法是同时使用两者并划分它们的角色:让 Conda 担任环境管理器,让 Poetry 担任包管理器。我的推理是(听起来)Conda 最适合管理环境,可用于编译和安装非 python 包,尤其是 CUDA 驱动程序(用于 GPU 功能),而 Poetry 作为 Python 包管理器比 Conda 更强大。
通过在 Conda 环境中使用 Poetry,我成功地相当轻松地完成了这项工作。诀窍是不要使用 Poetry 来管理 Python 环境:我没有使用poetry shellor poetry run、 onlypoetry init等命令poetry install(激活 Conda 环境后)。
为了充分披露,我的environment.yml文件(针对Conda)如下所示:
name: N
channels:
- defaults
- conda-forge
dependencies:
- python=3.9
- cudatoolkit
- cudnn
Run Code Online (Sandbox Code Playgroud)
我的诗歌.toml文件如下所示:
[tool.poetry]
name = "N"
authors = ["B"]
[tool.poetry.dependencies]
python = "3.9"
torch = "^1.10.1"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
Run Code Online (Sandbox Code Playgroud)
老实说,我这样做的原因之一是我在没有 Conda 的情况下很难安装 CUDA(用于 GPU 支持)。
您认为这个项目设计合理吗?
mic*_*hau 206
我有 Conda + Poetry 设置的经验,并且运行良好。我的绝大多数依赖项都在 中指定pyproject.toml,但是当 PyPI 中没有某些东西时,或者使用 Conda 安装它更容易时,我将其添加到 中environment.yml。而且,Conda 用作虚拟环境管理器,与 Poetry 配合良好:无需使用poetry run或poetry shell,激活正确的 Conda 环境就足够了。
environment.yml,以便在运行 时安装 Poetryconda create以及 Python 和其他非 PyPI 依赖项。conda-lock,它为您提供 Conda 依赖项的锁定文件,就像poetry.lockPoetry 依赖项的锁定文件一样。mamba通常与 兼容conda,但更能解决冲突,而且速度也快得多。另一个好处是,您的设置的所有用户都将使用相同的包解析器,独立于本地安装的 Conda 版本。environment.yml,并在安装后,向 Poetry 添加具有相同版本规范的条目pyproject.toml(不带版本号^或~在版本号之前)。这会让 Poetry 知道该软件包已经存在并且不应升级。pytorch下面的条目),另一种解决方案是启用严格的通道优先级。不幸的是,在 Conda 4.x 中,无法通过environment.yml.sys.path,如果用户在 Conda 环境之外安装了 Python 包,则可能会导致缺乏重现性。一种可能的解决方案是确保PYTHONNOUSERSITE环境变量设置为True(或任何其他非空值)。environment.yml:
name: my_project_env
channels:
- pytorch
- conda-forge
# We want to have a reproducible setup, so we don't want default channels,
# which may be different for different users. All required channels should
# be listed explicitly here.
- nodefaults
dependencies:
- python=3.10.* # or don't specify the version and use the latest stable Python
- mamba
- pip # pip must be mentioned explicitly, or conda-lock will fail
- poetry=1.* # or 1.1.*, or no version at all -- as you want
- tensorflow=2.8.0
- pytorch::pytorch=1.11.0
- pytorch::torchaudio=0.11.0
- pytorch::torchvision=0.12.0
# Non-standard section listing target platforms for conda-lock:
platforms:
- linux-64
Run Code Online (Sandbox Code Playgroud)
virtual-packages.ymlconda-lock(例如,当我们想要生成启用 CUDA 的锁定文件时,即使在没有 CUDA 的平台上也可以使用):
subdirs:
linux-64:
packages:
__cuda: 11.5
Run Code Online (Sandbox Code Playgroud)
conda-lock如果您有,mamba并且poetry已经安装在目标环境之外,您可以避免使用 bootstrap env 并简化下面的示例。
# Create a bootstrap env
conda create -p /tmp/bootstrap -c conda-forge mamba conda-lock poetry='1.*'
conda activate /tmp/bootstrap
# Create Conda lock file(s) from environment.yml
conda-lock -k explicit --conda mamba
# Set up Poetry
poetry init --python=~3.10 # version spec should match the one from environment.yml
# Fix package versions installed by Conda to prevent upgrades
poetry add --lock tensorflow=2.8.0 torch=1.11.0 torchaudio=0.11.0 torchvision=0.12.0
# Add conda-lock (and other packages, as needed) to pyproject.toml and poetry.lock
poetry add --lock conda-lock
# Remove the bootstrap env
conda deactivate
rm -rf /tmp/bootstrap
# Add Conda spec and lock files
git add environment.yml virtual-packages.yml conda-linux-64.lock
# Add Poetry spec and lock files
git add pyproject.toml poetry.lock
git commit
Run Code Online (Sandbox Code Playgroud)
上面的设置可能看起来很复杂,但可以以相当简单的方式使用。
conda create --name my_project_env --file conda-linux-64.lock
conda activate my_project_env
poetry install
Run Code Online (Sandbox Code Playgroud)
conda activate my_project_env
Run Code Online (Sandbox Code Playgroud)
# Re-generate Conda lock file(s) based on environment.yml
conda-lock -k explicit --conda mamba
# Update Conda packages based on re-generated lock file
mamba update --file conda-linux-64.lock
# Update Poetry packages and re-generate poetry.lock
poetry update
Run Code Online (Sandbox Code Playgroud)
小智 9
对于任何使用@michau 的答案但遇到包括诗歌在内的问题的人environment.yml。目前, conda-forge 不支持诗歌版本 1.2 或更高版本。您仍然可以将诗歌 v1.2 包含在.yml以下内容中作为替代:
dependencies:
- python=3.9.*
- mamba
- pip
- pip:
- "poetry>=1.2"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
71805 次 |
| 最近记录: |