skip to Main Content

I’m trying to run my project in Docker via Poetry.
It runs fine on Windows and Linux when just run normally in a Poetry-created venv. However, when running with Docker, I get the following:

RuntimeError: Couldn't load custom C++ ops. This can happen if your PyTorch and torchvision versions are incompatible, or if you had errors while compiling torchvision from source. For further information on the compatible versions, check https://github.com/pytorch/vision#installation for the compatibility matrix. Please check your PyTorch version with torch.__version__ and your torchvision version with torchvision.__version__ and verify if they are compatible, and if not please reinstall torchvision so that it matches your PyTorch install.

It works if torchvision is reinstalled via the venv’s pip, but this isn’t ideal as I want to just use Poetry. This occurs when using Docker on Linux and on Windows (via WSL2), even when the program works fine when Docker isn’t used.

The versions are compatible according to the Torchvision repo.

root@eb8f096b3563:/app# poetry run pip show torch
Name: torch
Version: 2.1.2+cpu
Summary: Tensors and Dynamic neural networks in Python with strong GPU acceleration
Home-page: https://pytorch.org/
Author: PyTorch Team
Author-email: [email protected]
License: BSD-3
Location: /root/.cache/pypoetry/virtualenvs/wyzely-detect-9TtSrW0h-py3.10/lib/python3.10/site-packages
Requires: filelock, fsspec, jinja2, networkx, sympy, typing-extensions
Required-by: thop, torchvision, ultralytics, wyzely-detect
root@eb8f096b3563:/app# poetry run pip show torchvision
Name: torchvision
Version: 0.16.2
Summary: image and video datasets and models for torch deep learning
Home-page: https://github.com/pytorch/vision
Author: PyTorch Core Team
Author-email: [email protected]
License: BSD
Location: /root/.cache/pypoetry/virtualenvs/wyzely-detect-9TtSrW0h-py3.10/lib/python3.10/site-packages
Requires: numpy, pillow, requests, torch
Required-by: ultralytics
root@eb8f096b3563:/app# 

2

Answers


  1. Chosen as BEST ANSWER

    Seems I had to use Torch from PyPi for Docker and Torch from the Torch CPU repository on Windows.

    pyproject.toml (comments removed for clarity)

    [tool.poetry]
    name = "wyzely-detect"
    version = "0.2.1"
    description = "Recognize faces/objects in a video stream (from a webcam or a security camera) and send notifications to your devices"
    authors = ["slashtechno <[email protected]>"]
    repository = "https://github.com/slashtechno/wyzely-detect"
    keywords = ["object-detection", "face-detection", "wyze", "security", "yolov8", "unified-push"]
    license = "MIT"
    readme = "README.md"
    packages = [{include = "wyzely_detect"}]
    
    [tool.poetry.dependencies]
    
    python = ">=3.10, <3.12"
    
    python-dotenv = "^1.0.0"
    httpx = "^0.25.0"
    opencv-python = "^4.8.1.78"
    ultralytics = "^8.0.190"
    hjson = "^3.1.0"
    numpy = "^1.23.2"
    
    torch = [
        {version = "^2.2.1", markers = "extra!='cuda' and platform_system=='Linux'"},
        {version = "^2.2.1", source = "pytorch-cpu", markers = "extra!='cuda' and platform_system!='Linux'"},
        ]
    
    absl-py = "^2.1.0"
    tensorflow = {version = "^2.13.0", markers = "extra!='cuda'"}
    tensorflow-macos = { version = "^2.13.0", platform = "darwin", markers = "platform_machine=='arm64'" }
    tensorflow-intel = { version = "^2.13.0", platform = "win32" }
    tensorflow-io-gcs-filesystem = [
        { version = "< 0.32.0", markers = "platform_system == 'Windows'" }
    ]
    
    deepface = "^0.0.79"
    prettytable = "^3.9.0"
    
    [tool.poetry.group.gpu]
    optional = true
    
    [tool.poetry.group.gpu.dependencies]
    torch = {version = "^2.2.1", source = "pytorch-cu121", markers = "extra=='cuda'"}
    tensorflow = {version = "^2.14.0", extras = ["and-cuda"], markers = "extra=='cuda'"}
    
    [tool.poetry.extras]
    
    cuda = []
    
    [[tool.poetry.source]]
    name = "pytorch-cpu"
    url = "https://download.pytorch.org/whl/cpu"
    priority = "explicit"
    
    [[tool.poetry.source]]
    name = "pytorch-cu121"
    url = "https://download.pytorch.org/whl/cu121"
    priority = "explicit"
    
    [tool.poetry.group.dev.dependencies]
    black = "^23.9.1"
    ruff = "^0.0.291"
    ipykernel = "^6.25.2"
    nbconvert = "^7.9.2"
    
    [build-system]
    requires = ["poetry-core"]
    build-backend = "poetry.core.masonry.api"
    
    [tool.ruff]
    
    line-length = 135
    extend-select= ["FIX002"]
    
    [tool.poetry.scripts]
    wyzely-detect = "wyzely_detect.__main__:main"
    

    Dockerfile

    FROM python:3.10.5-buster
    
    LABEL org.opencontainers.image.description "Docker image for running wyzely-detect"
    LABEL org.opencontainers.image.source "https://github.com/slashtechno/wyzely-detect"
    
    RUN apt update && apt install libgl1 -y
    RUN pip install poetry
    
    
    WORKDIR /app
    
    COPY . .
    
    RUN poetry install
    
    # RUN poetry run pip uninstall -y torchvision 
    # RUN poetry run pip install torchvision 
    
    ENTRYPOINT ["poetry", "run", "python", "-m", "--", "wyzely_detect", "--no-display"]
    ```Dockerfile
    
    All file changes: https://github.com/slashtechno/wyzely-detect/compare/771154cbefdb09c7328c49ded9b675a38b628426..ee66a2f42845be512b65fb398c75ba06e94cea23
    
    

  2. I’ve added the torchvision dependency to pyproject.toml. Just building and running the image created via the Dockerfile without other services specified in docker-compose.yml.

    🗎 Dockerfile

    FROM python:3.10.5-buster
    
    LABEL org.opencontainers.image.description "Docker image for running wyzely-detect"
    LABEL org.opencontainers.image.source "https://github.com/slashtechno/wyzely-detect"
    
    RUN apt update && apt install -y libgl1
    RUN pip install poetry
    
    WORKDIR /app
    
    COPY . .
    
    RUN poetry install
    
    # ENTRYPOINT ["poetry", "run", "python", "-m", "--", "wyzely_detect", "--no-display"]
    

    🗎 pyproject.toml

    name = "wyzely-detect"
    version = "0.2.1"
    description = ""
    authors = ["slashtechno <[email protected]>"]
    repository = "https://github.com/slashtechno/wyzely-detect"
    keywords = ["object-detection", "face-detection", "wyze", "security", "yolov8", "unified-push"]
    license = "MIT"
    readme = "README.md"
    packages = [{include = "wyzely_detect"}]
    
    [tool.poetry.dependencies]
    python = ">=3.10, <3.12"
    python-dotenv = "^1.0.0"
    httpx = "^0.25.0"
    opencv-python = "^4.8.1.78"
    ultralytics = "^8.0.190"
    hjson = "^3.1.0"
    numpy = "^1.23.2"
    torchvision = "0.16.2"
    torch = {version = "2.1.*", source = "pytorch-cpu", markers = "extra!='cuda'" }
    absl-py = "^2.1.0"
    tensorflow = {version = "^2.13.0", markers = "extra!='cuda'"}
    tensorflow-macos = { version = "^2.13.0", platform = "darwin", markers = "platform_machine=='arm64'" }
    tensorflow-intel = { version = "^2.13.0", platform = "win32" }
    tensorflow-io-gcs-filesystem = [
        { version = "< 0.32.0", markers = "platform_system == 'Windows'" }
    ]
    deepface = "^0.0.79"
    prettytable = "^3.9.0"
    
    [tool.poetry.group.gpu]
    optional = true
    
    [tool.poetry.group.gpu.dependencies]
    torch = {version = "2.1.*", source = "pytorch-cu121", markers = "extra=='cuda'"}
    tensorflow = {version = "^2.14.0", extras = ["and-cuda"], markers = "extra=='cuda'"}
    torchvision = "0.16.2"
    
    [tool.poetry.extras]
    cuda = []
    
    [[tool.poetry.source]]
    name = "pytorch-cpu"
    url = "https://download.pytorch.org/whl/cpu"
    priority = "explicit"
    
    [[tool.poetry.source]]
    name = "pytorch-cu121"
    url = "https://download.pytorch.org/whl/cu121"
    priority = "explicit"
    
    [tool.poetry.group.dev.dependencies]
    black = "^23.9.1"
    ruff = "^0.0.291"
    ipykernel = "^6.25.2"
    nbconvert = "^7.9.2"
    
    [build-system]
    requires = ["poetry-core"]
    build-backend = "poetry.core.masonry.api"
    
    [tool.ruff]
    line-length = 135
    extend-select= ["FIX002"]
    
    [tool.poetry.scripts]
    wyzely-detect = "wyzely_detect.__main__:main"
    

    When I build and run the image (I’ve commented out the ENTRYPOINT in the Dockerfile and then running Python in the container) I can import both the torch and torchvision packages. The latter gives me a warning because I don’t have a GPU on my machine. I can’t replicate the runtime error that you see though.

    enter image description here

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search