Detectron: Die Docker-Installation schlägt fehl mit: „has no member named ‚numel‘“

Erstellt am 19. Nov. 2018  ·  13Kommentare  ·  Quelle: facebookresearch/Detectron

Hallo, alle miteinander,
Seit kurzem habe ich ein Problem bei der Installation von Detectron über den Docker. Ich scheitere jetzt mit:

/usr/local/caffe2_build/include/caffe2/core/tensor.h:687:17: Hinweis: Kandidat erwartet 1 Argument, 0 bereitgestellt
/detectron/detectron/ops/zero_even_op.cc:33:27: Fehler: 'class caffe2::Tensor<:cpucontext i="7">' hat kein Mitglied namens 'numel'
for (auto i = 0; i < Y->zahl(); i += 2) {

Ich habe hier ein ähnliches Problem gefunden:
https://github.com/facebookresearch/Detectron/issues/732
aber ich kann den Fix nicht verwenden, da Detectron direkt aus dem Repository installiert. Könnten Sie bitte das Repository ändern?
Vielen Dank im Voraus,

Erik

Hilfreichster Kommentar

Ich habe dies zum Laufen gebracht, indem ich d56e267 anstelle des neuesten Masters ausgecheckt habe

Du meinst im Dockerfile? z.B

Führen Sie den Git-Klon https://github.com/facebookresearch/detectron /detectron aus
RUN cd /detectron && git checkout d56e267

Alle 13 Kommentare

Hallo, ich habe das gleiche Problem mit dem Dockerfile. Ich frage mich, ob das mit der CUDA-Version zusammenhängen könnte.

Kompilieren bricht jetzt. Das bekommen:
Gibt es keinen unterstützten automatisierten Build davon irgendwo auf dem Docker-Hub?

Mein System hat andere Container, die CUDA verwenden, die gut funktionieren.

-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE  
-- CUDA detected: 9.0
-- Added CUDA NVCC flags for: sm_30 sm_35 sm_50 sm_52 sm_60 sm_61 sm_70
-- Found libcuda: /usr/local/cuda/lib64/stubs/libcuda.so
-- Found libnvrtc: /usr/local/cuda/lib64/libnvrtc.so
-- Found CUDNN: /usr/include  
-- Found cuDNN: v7.0.5  (include: /usr/include, library: /usr/lib/x86_64-linux-gnu/libcudnn.so)
-- Summary:
--   CMake version        : 3.5.1
--   CMake command        : /usr/bin/cmake
--   System name          : Linux
--   C++ compiler         : /usr/bin/c++
--   C++ compiler version : 5.4.0
--   CXX flags            :  -std=c++11 -O2 -fPIC -Wno-narrowing
--   Caffe2 version       : 0.8.1
--   Caffe2 include path  : /usr/local/caffe2_build/include
--   Have CUDA            : TRUE
--     CUDA version       : 9.0
--     CuDNN version      : 7.0.5
-- Configuring done
-- Generating done
-- Build files have been written to: /detectron/build
make[1]: Entering directory '/detectron/build'
make[2]: Entering directory '/detectron/build'
make[3]: Entering directory '/detectron/build'
make[3]: Entering directory '/detectron/build'
[ 20%] Building NVCC (Device) object CMakeFiles/caffe2_detectron_custom_ops_gpu.dir/detectron/ops/caffe2_detectron_custom_ops_gpu_generated_zero_even_op.cu.o
Scanning dependencies of target caffe2_detectron_custom_ops
make[3]: Leaving directory '/detectron/build'
make[3]: Entering directory '/detectron/build'
[ 40%] Building CXX object CMakeFiles/caffe2_detectron_custom_ops.dir/detectron/ops/zero_even_op.cc.o
In file included from /usr/local/caffe2_build/include/caffe2/core/allocator.h:22:0,
                 from /usr/local/caffe2_build/include/caffe2/core/context.h:25,                                                                     
                 from /detectron/detectron/ops/zero_even_op.h:20,                                                                                   
                 from /detectron/detectron/ops/zero_even_op.cc:17:                                                                                  
/detectron/detectron/ops/zero_even_op.cc: In member function 'bool caffe2::ZeroEvenOp<T, Context>::RunOnDevice() [with T = float; Context = caffe2::CPUContext]':                                                                                                                                       
/detectron/detectron/ops/zero_even_op.cc:25:23: error: no matching function for call to 'caffe2::Tensor<caffe2::CPUContext>::dim() const'           
   CAFFE_ENFORCE(X.dim() == 1);                                                                                                                     
                       ^                                                                                                                            
In file included from /usr/local/caffe2_build/include/caffe2/core/net.h:34:0,                                                                       
                 from /usr/local/caffe2_build/include/caffe2/core/operator.h:29,                                                                    
                 from /detectron/detectron/ops/zero_even_op.h:21,                                                                                   
                 from /detectron/detectron/ops/zero_even_op.cc:17:                                                                                  
/usr/local/caffe2_build/include/caffe2/core/tensor.h:687:17: note: candidate: caffe2::TIndex caffe2::Tensor<Context>::dim(int) const [with Context = caffe2::CPUContext; caffe2::TIndex = long int]                                                                                                     
   inline TIndex dim(const int i) const {                                                                                                           
                 ^                                                                                                                                  
/usr/local/caffe2_build/include/caffe2/core/tensor.h:687:17: note:   candidate expects 1 argument, 0 provided                                       
/detectron/detectron/ops/zero_even_op.cc:33:27: error: 'class caffe2::Tensor<caffe2::CPUContext>' has no member named 'numel'                       
   for (auto i = 0; i < Y->numel(); i += 2) {                                                                                                       
                           ^                                                                                                                        
CMakeFiles/caffe2_detectron_custom_ops.dir/build.make:62: recipe for target 'CMakeFiles/caffe2_detectron_custom_ops.dir/detectron/ops/zero_even_op.cc.o' failed
make[3]: *** [CMakeFiles/caffe2_detectron_custom_ops.dir/detectron/ops/zero_even_op.cc.o] Error 1
make[3]: Leaving directory '/detectron/build'
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/caffe2_detectron_custom_ops.dir/all' failed
make[2]: *** [CMakeFiles/caffe2_detectron_custom_ops.dir/all] Error 2
make[2]: *** Waiting for unfinished jobs....                                                                                                        
Scanning dependencies of target caffe2_detectron_custom_ops_gpu
make[3]: Leaving directory '/detectron/build'
make[3]: Entering directory '/detectron/build'
[ 60%] Building CXX object CMakeFiles/caffe2_detectron_custom_ops_gpu.dir/detectron/ops/zero_even_op.cc.o
In file included from /usr/local/caffe2_build/include/caffe2/core/allocator.h:22:0,
                 from /usr/local/caffe2_build/include/caffe2/core/context.h:25,                                                                     
                 from /detectron/detectron/ops/zero_even_op.h:20,
                 from /detectron/detectron/ops/zero_even_op.cc:17:
/detectron/detectron/ops/zero_even_op.cc: In member function 'bool caffe2::ZeroEvenOp<T, Context>::RunOnDevice() [with T = float; Context = caffe2::CPUContext]':
/detectron/detectron/ops/zero_even_op.cc:25:23: error: no matching function for call to 'caffe2::Tensor<caffe2::CPUContext>::dim() const'
   CAFFE_ENFORCE(X.dim() == 1);
                       ^
In file included from /usr/local/caffe2_build/include/caffe2/core/net.h:34:0,
                 from /usr/local/caffe2_build/include/caffe2/core/operator.h:29,
                 from /detectron/detectron/ops/zero_even_op.h:21,
                 from /detectron/detectron/ops/zero_even_op.cc:17:
/usr/local/caffe2_build/include/caffe2/core/tensor.h:687:17: note: candidate: caffe2::TIndex caffe2::Tensor<Context>::dim(int) const [with Context = caffe2::CPUContext; caffe2::TIndex = long int]
   inline TIndex dim(const int i) const {
                 ^
/usr/local/caffe2_build/include/caffe2/core/tensor.h:687:17: note:   candidate expects 1 argument, 0 provided
/detectron/detectron/ops/zero_even_op.cc:33:27: error: 'class caffe2::Tensor<caffe2::CPUContext>' has no member named 'numel'
   for (auto i = 0; i < Y->numel(); i += 2) {
                           ^
CMakeFiles/caffe2_detectron_custom_ops_gpu.dir/build.make:69: recipe for target 'CMakeFiles/caffe2_detectron_custom_ops_gpu.dir/detectron/ops/zero_even_op.cc.o' failed
make[3]: *** [CMakeFiles/caffe2_detectron_custom_ops_gpu.dir/detectron/ops/zero_even_op.cc.o] Error 1
make[3]: Leaving directory '/detectron/build'
CMakeFiles/Makefile2:104: recipe for target 'CMakeFiles/caffe2_detectron_custom_ops_gpu.dir/all' failed
make[2]: Leaving directory '/detectron/build'
make[2]: *** [CMakeFiles/caffe2_detectron_custom_ops_gpu.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make[1]: Leaving directory '/detectron/build'
make[1]: *** [all] Error 2
Makefile:13: recipe for target 'ops' failed
make: *** [ops] Error 2
The command '/bin/sh -c make ops' returned a non-zero code: 2

Ich habe dies zum Laufen gebracht, indem ich d56e267efc92b65b8d899f1b89a7ed2bca3e5f44 anstelle des neuesten Masters ausgecheckt habe

@TheNeikos , ich bekomme es auch mit d56e267efc92b65b8d899f1b89a7ed2bca3e5f44 zum Laufen

Ich habe dies zum Laufen gebracht, indem ich d56e267 anstelle des neuesten Masters ausgecheckt habe

Du meinst im Dockerfile? z.B

Führen Sie den Git-Klon https://github.com/facebookresearch/detectron /detectron aus
RUN cd /detectron && git checkout d56e267

@beatthat ja genau

Danke @TheNeikos ! Zuckerberg sollte Ihnen mindestens 10.000 Euro geben, denn ohne Ihren Kommentar hätte ich Detectron aufgegeben und nur die Implementierung von Matterport verwendet :D

@manyaafonso
Könnten Sie bitte detaillierter darüber berichten, wie Sie dieses Problem lösen?

Ich folge dem Vorschlag von @TheNeikos @beatthat @francois-wellenreiter
1. Führen Sie den Git-Klon https://github.com/facebookresearch/detectron /detectron aus

  1. RUN cd /detectron && git checkout d56e267
    Und dann habe ich es versucht
  2. Führen Sie cd /docker aus
  3. RUN docker build -t detectron:c2-cuda9-cudnn7 .

Und immer noch die gleiche Fehlerausgabe.
Ich denke, git checkout d56e267 hilft mir, auf die ältere Version zu wechseln. Und in d56e267
"/detectron/ops/zero_even_op.cc" diese Datei hat
for (auto i = 0; i < Y->size(); i += 2) {

Aber wenn ich versuche zu bauen, wird die Fehlermeldung immer noch angezeigt

for (auto i = 0; i < Y->numel(); i += 2) {
                           ^

Ich bin mir nicht sicher, ob ich etwas vergessen habe.

Hallo @randf102 ,

Tatsächlich habe ich diese Änderung auf das Dockerfile angewendet und der Build war erfolgreich:

„Unterschied

diff --git a/docker/Dockerfile b/docker/Dockerfile
Index 38cc0ea..c02a110 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -10,6 +10,9 @@ ENV LD_LIBRARY_PATH /usr/local/caffe2_build/lib:${LD_LIBRARY_PATH}
# Klonen Sie das Detectron-Repository
Führen Sie den Git-Klon https://github.com/facebookresearch/detectron /detectron aus

+WORKDIR /Erkennung
+ git checkout d56e267efc92b65b8d899f1b89a7ed2bca3e5f44 AUSFÜHREN
+
# Python-Abhängigkeiten installieren
RUN pip install -r /detectron/requirements.txt
```

Hallo @randf102 , ich habe einfach die Dockerdatei geändert und den folgenden Teil gemäß den obigen Kommentaren geändert:

Klonen Sie das Detectron-Repository

Führen Sie den Git-Klon https://github.com/facebookresearch/detectron /detectron aus

Basierend auf https://github.com/facebookresearch/Detectron/issues/756

RUN cd /detectron && git checkout d56e267

Und dann an der Linux-Eingabeaufforderung:
nvidia-docker build -t my_detectron_image .

@francois-wellenreiter @manyaafonso
Danke, dass du mir geholfen hast.
Ich sollte das Dockerfile ändern, nicht "git checkout d56e267" direkt im Terminal ausführen.
Ich habe es verstanden und endlich erfolgreich gebaut.
Danke!

@TheNeikos , danke für deine Antwort

Ich konnte die Docker-Datei mit dem neuesten Commit (7aa91aa) kompilieren, indem ich im Wesentlichen zwei Änderungen der Funktionsumbenennung aus den Commits c00e35a und 8181a32 rückgängig machte. Erledigt dies Hinzufügen von zwei sed-Anweisungen nach den "Install COCO API-Zeilen":

# Install the COCO API
RUN git clone https://github.com/cocodataset/cocoapi.git /cocoapi
WORKDIR /cocoapi/PythonAPI
RUN make install

# Patch
RUN sed -i 's/numel/size/g' /detectron/detectron/ops/zero_even_op.cc && \
    sed -i 's/X.dim/X.ndim/g' /detectron/detectron/ops/zero_even_op.cc
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen