source

콘다 + 시를 사용하는 것이 말이 됩니까?

lovecheck 2023. 9. 4. 20:24
반응형

콘다 + 시를 사용하는 것이 말이 됩니까?

기계 학습 프로젝트에 콘다 + 시를 사용하는 것이 말이 됩니까?저의 (초보적인) 이해를 공유할 수 있도록 해주시고, 저에게 수정하거나 알려주시기 바랍니다.

가 알기로는 콘다와 시는 목적은 다르지만 대부분 중복됩니다.

  • Conda는 기본적으로 환경 관리자(실제로 Python일 필요는 없지만)이지만 패키지 및 종속성도 관리할 수 있습니다.
  • Poetry는 주로 Python 패키지 관리자(예: pip 업그레이드)이지만 Python 환경을 만들고 관리할 수도 있습니다(예: Pyenv 업그레이드).

저의 생각은 콘다를 환경 매니저로, 시를 패키지 매니저로 둘 다 사용하고 그들의 역할을 구분하는 것입니다.제 추론으로는 Conda가 환경 관리에 가장 적합하고 특히 CUDA 드라이버(GPU 기능용)를 컴파일하고 설치하는 데 사용할 수 있는 반면 Poetry는 Python 패키지 관리자로서 Conda보다 더 강력합니다.

저는 콘다 환경에서 시를 사용함으로써 이 작품을 꽤 쉽게 만들 수 있었습니다.비결은 Poetry를 사용하여 Python 환경을 관리하지 않는 것입니다.다음과 같은 명령을 사용하지 않습니다.poetry shell또는poetry run, 친구들.poetry init,poetry install등(콘다 환경을 활성화한 후).

전체 공개를 위해 내 environment.yml 파일(콘다의 경우)은 다음과 같습니다.

name: N

channels:
  - defaults
  - conda-forge

dependencies:
  - python=3.9
  - cudatoolkit
  - cudnn

그리고 내 시.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"

솔직히 제가 이렇게 진행한 이유 중 하나는 Conda 없이 CUDA(GPU 지원용) 설치에 어려움을 겪었기 때문입니다.

이 프로젝트 설계가 합리적으로 보이나요?

저는 콘다 + 시를 설치한 경험이 있으며, 잘 작동하고 있습니다.은 내의성의다은명있시다습니어되음에에 명시되어 있습니다.pyproject.toml할 수 없는하는 것이 쉬울 때, 을 PyPI에 합니다.environment.yml관리자로 되며, Poetry와 잘 합니다: ""를 사용할 : "Poetry": "Conda"를 사용할 수 있습니다.poetry run또는poetry shell적절한 콘다 환경을 활성화하기에 충분합니다.

재현 가능한 환경을 만들기 위한 팁

  1. (필요한 경우) 버전 번호가 포함된 시를 종속 항목으로 추가합니다.environment.yml를 실행할 때 Poice를 설치하도록 합니다.conda create Non-Python 께 Pi 됩니다.PI 종속성.
  2. 더하다conda-lock 있는 콘다 합니다. 마치 당신이 가지고 있는 것처럼.poetry.lock시에 대한 의존성.
  3. 사을고려다니합을 사용하는 것을 .mamba은 일반적으로 으와로호는되환반일과 호환됩니다.conda충돌을 더 잘 해결하고 훨씬 더 빠릅니다.추가적인 이점은 설치 프로그램의 모든 사용자가 로컬로 설치된 Conda 버전과 관계없이 동일한 패키지 확인 프로그램을 사용한다는 것입니다.
  4. 기본적으로 Python 종속성을 추가하는 데 Poetry를 사용합니다.이유가 있는 경우 Conda를 통해 패키지를 설치합니다(예: CUDA 지원 버전을 얻으려면).이러한 경우 패키지의 정확한 버전을 다음에 지정하는 것이 가장 좋습니다.environment.yml설치 후 버전 사양이 동일한 항목을 Poetry's에 추가합니다.pyproject.toml(^또는~버전 번호 앞).이렇게 하면 Poetry에서 패키지가 있으며 업그레이드해서는 안 된다는 것을 알 수 있습니다.
  5. 동일한 패키지를 제공하는 다른 채널을 사용하는 경우 특정 패키지가 어느 채널에서 다운로드되는지 알 수 없습니다.입니다(" ": " " " " ").pytorch아래 항목), 그리고 또 다른 솔루션은 엄격한 채널 우선 순위를 활성화하는 것입니다.안타깝게도 Conda 4.x에서는 이 옵션을 활성화할 수 있는 방법이 없습니다.environment.yml.
  6. Python은 다음에 사용자 사이트 패키지를 추가합니다.sys.path사용자가 Conda 환경 외부에 Python 패키지를 설치한 경우 이로 인해 재현성이 저하될 수 있습니다.한 가지 가능한 해결책은 환경 변수를 다음과 같이 설정하는 것입니다.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

virtual-packages.yml(예: 우리가 원할 때 사용할 수 있습니다.conda-lockCUDA가 없는 플랫폼에서도 CUDA 사용 잠금 파일을 생성합니다.)

subdirs:
  linux-64:
    packages:
      __cuda: 11.5

초기 설정

할 수 .conda-lock,mamba그리고.poetry대상 환경 외부에 이미 설치되어 있습니다.

# 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

사용.

위의 설정은 복잡해 보일 수 있지만 상당히 간단한 방법으로 사용할 수 있습니다.

환경 조성

conda create --name my_project_env --file conda-linux-64.lock
conda activate my_project_env
poetry install

환경 활성화

conda activate my_project_env

환경 업데이트

# 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

@michau의 답변을 사용하지만 시를 포함한 문제가 있는 모든 사람에게.environment.yml현재 시 버전 1.2 이상은 콘다 단조로 지원되지 않습니다.여전히 v1.2 시를 포함할 수 있습니다..yml다음을 대안으로 제시합니다.

dependencies:
  - python=3.9.*
  - mamba
  - pip 
  - pip:
    - "poetry>=1.2"

언급URL : https://stackoverflow.com/questions/70851048/does-it-make-sense-to-use-conda-poetry

반응형