facebookresearch / detectron2

Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.
https://detectron2.readthedocs.io/en/latest/
Apache License 2.0
30.21k stars 7.43k forks source link

`ERROR: Failed building wheel for detectron2` when installing detectron2 through a docker image in a DigitalOcean droplet #4994

Open eRuaro opened 1 year ago

eRuaro commented 1 year ago

I'm running into an error when installing detectron2 in a docker image in a digital ocean droplet but it works with no problems when I build the docker image in my local machine.

EDIT: Upon rebuilding with --no-cache the dockerfile below doesn't include detectron when building for some reason. Didn't have this before.

Here's my dockerfile:

FROM python:3.10-slim-buster

# Update package lists
RUN apt-get update && apt-get install ffmpeg libsm6 libxext6 gcc g++ git build-essential libpoppler-cpp-dev pkg-config poppler-utils tesseract-ocr libtesseract-dev -y

# Make working directories
RUN  mkdir -p  /app
WORKDIR  /app
# Copy the requirements.txt file to the container
COPY requirements.txt .

# Install dependencies
RUN pip install --upgrade pip

RUN pip install torch torchvision torchaudio

RUN pip install -r requirements.txt

RUN pip install 'git+https://github.com/facebookresearch/detectron2.git@v0.4#egg=detectron2'

# Copy the .env file to the container
COPY .env .

# Copy every file in the source folder to the created working directory
COPY  . .

# Expose the port that the application will run on
EXPOSE 8080

# Start the application
CMD ["python3.10", "uvicorn", "-m", "main:app", "--proxy-headers", "--host", "0.0.0.0", "--port", "8080"]

I'm using a basic digital ocean droplet with 2 GB Memory / 2 Intel vCPUs / 60 GB Disk / and running Ubuntu 22.10 x64.

Here's the error:

Building wheels for collected packages: detectron2, fvcore
  Building wheel for detectron2 (setup.py): started
  Building wheel for detectron2 (setup.py): still running...
  Building wheel for detectron2 (setup.py): still running...
  Building wheel for detectron2 (setup.py): finished with status 'error'
  error: subprocess-exited-with-error

  × python setup.py bdist_wheel did not run successfully.
  │ exit code: 1
  ╰─> [397 lines of output]
      running bdist_wheel
      /usr/local/lib/python3.10/site-packages/torch/utils/cpp_extension.py:476: UserWarning: Attempted to use ninja as the BuildExtension backend but we could not find ninja.. Falling back to using the slow distutils backend.

...
...
...

                       from /tmp/pip-req-build-1jp0qvnm/detectron2/layers/csrc/vision.cpp:3:
      /usr/local/lib/python3.10/site-packages/torch/include/pybind11/pybind11.h: In instantiation of ‘class pybind11::class_<detectron2::COCOeval::InstanceAnnotation>’:
      /tmp/pip-req-build-1jp0qvnm/detectron2/layers/csrc/vision.cpp:105:73:   required from here
      /usr/local/lib/python3.10/site-packages/torch/include/pybind11/pybind11.h:1479:7: warning: ‘pybind11::class_<detectron2::COCOeval::InstanceAnnotation>’ declared with greater visibility than its base ‘pybind11::detail::generic_type’ [-Wattributes]
       class class_ : public detail::generic_type {
             ^~~~~~
      /usr/local/lib/python3.10/site-packages/torch/include/pybind11/pybind11.h: In instantiation of ‘class pybind11::class_<detectron2::COCOeval::ImageEvaluation>’:
      /tmp/pip-req-build-1jp0qvnm/detectron2/layers/csrc/vision.cpp:107:67:   required from here
      /usr/local/lib/python3.10/site-packages/torch/include/pybind11/pybind11.h:1479:7: warning: ‘pybind11::class_<detectron2::COCOeval::ImageEvaluation>’ declared with greater visibility than its base ‘pybind11::detail::generic_type’ [-Wattributes]
      gcc: fatal error: Killed signal terminated program cc1plus
      compilation terminated.
      error: command '/usr/bin/gcc' failed with exit code 1
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for detectron2
  Running setup.py clean for detectron2
  Building wheel for fvcore (setup.py): started
  Building wheel for fvcore (setup.py): finished with status 'done'
  Created wheel for fvcore: filename=fvcore-0.1.5.post20221221-py3-none-any.whl size=61405 sha256=f68cb822c5d8cc162abe548a6080cc96afae83ad7f5dfdcc836fe6cf5ae14b81
  Stored in directory: /root/.cache/pip/wheels/01/c0/af/77c1cf53a1be9e42a52b48e5af2169d40ec2e89f7362489dd0
Successfully built fvcore
Failed to build detectron2
ERROR: Could not build wheels for detectron2, which is required to install pyproject.toml-based projects

I've also tried with this dockerfile:

FROM python:3.10-slim-buster

# Update package lists
RUN apt-get update && apt-get install ffmpeg libsm6 libxext6 gcc g++ git build-essential libpoppler-cpp-dev pkg-config poppler-utils tesseract-ocr libtesseract-dev -y

# Make working directories
RUN  mkdir -p  /app
WORKDIR  /app
# Copy the requirements.txt file to the container
COPY requirements.txt .

# Install dependencies
RUN pip install --upgrade pip

RUN pip install torch torchvision torchaudio

RUN pip install -r requirements.txt

RUN pip install 'git+https://github.com/facebookresearch/detectron2.git'

# Copy the .env file to the container
COPY .env .

# Copy every file in the source folder to the created working directory
COPY  . .

# Expose the port that the application will run on
EXPOSE 8080

# Start the application
CMD ["python3.10", "-m", "uvicorn", "main:app", "--proxy-headers", "--host", "0.0.0.0", "--port", "8080"]

But it doesn't install detectron on my local machine.

github-actions[bot] commented 1 year ago

You've chosen to report an unexpected problem or bug. Unless you already know the root cause of it, please include details about it by filling the issue template. The following information is missing: "Instructions To Reproduce the Issue and Full Logs";

arunchandra23 commented 1 year ago

Try running pip install git+https://github.com/facebookresearch/iopath@8f359cf63bec091969ad8f30fa14c17d3218c347#egg=iopath before detectron2

rahelbeloch commented 1 year ago

We had the same issue and it came down to memory limitations. Running our docker file with the command RUN pip install 'git+https://github.com/facebookresearch/detectron2.git' required up to 30GB memory on the machine where it was running.

Maybe you can use some memory visualisation tool of your machine to see if the memory is running full while building the image...

nourhan142 commented 9 months ago

Did you find any answers for your problem because I am facing the same problem.