2016-02-25 20 views
6

Tôi đang cố gắng nhập thư viện theano trong một trường hợp aws để sử dụng GPU. Tôi đã viết một kịch bản python sử dụng boto để tự động thiết lập aws mà về cơ bản sẽ làm một ssh cho cá thể từ máy cục bộ của tôi và sau đó bắt đầu một tập lệnh bash nơi tôi làm "python -c 'import theano'" để khởi động GPU. Nhưng tôi nhận được lỗi sau:
Không thể biên dịch cuda_ndarray.cu: libcublas.so.7.5: không thể mở tệp đối tượng được chia sẻ

ERROR (theano.sandbox.cuda): Failed to compile cuda_ndarray.cu: libcublas.so.7.5: cannot open shared object file: No such file or directory

Khi tôi cố gắng nhập mô-đun trực tiếp vào vỏ lệnh mẫu, nó sẽ tự động bắt đầu sử dụng GPU.

Using gpu device 0: GRID K520 (CNMeM is disabled)

Tôi đoán tôi thiếu một số nhập khác phải thực hiện khi nhập thông qua tập lệnh python tự động hóa của tôi. Những gì có thể có thể là giải pháp?

+2

Có thể là sự cố môi trường. Hãy thử python "os nhập khẩu; in (os.eviron [" PATH "])" và xem nếu "/ usr/local/cuda/bin" là trong PATH. – zaxliu

+0

Cũng kiểm tra 'LD_LIBRARY_PATH' để đảm bảo rằng các thư viện CUDA có thể được tìm thấy trong thời gian chạy. – wildwilhelm

Trả lời

6

tôi sẽ cố gắng giải quyết vấn đề này rõ ràng và súc tích, như tôi đã tìm thấy câu trả lời không thực sự tốt cho những người mà đang bắt đầu sử dụng unix hoặc không quen thuộc với biên soạn và liên kết.

Sự cố phải làm với liên kết động và có thể giải quyết bằng hai cách. Đầu tiên là bằng cách thiết lập biến môi trường LD_LIBRARY_PATH.Giả sử CUDA được cài đặt trong/usr/local/CUDA /, chỉ cần thêm trong tập tin môi trường của bạn/etc/môi trường:

LD_LIBRARY_PATH=/usr/local/cuda/ 

Hoặc đơn giản là trong .bashrc của bạn:

export LD_LIBRARY_PATH=/usr/local/cuda/lib64/ 

Giải pháp này không được khuyến khích bởi unix rất kinh nghiệm (tôi không phải là một trong những tôi đã chỉ đọc rằng trên internet và tôi làm theo rất kinh nghiệm Linux). Vì vậy, giải pháp tôi tìm thấy là đơn giản, sửa đổi đường dẫn nơi tìm kiếm phần mềm Linux ld cho các thư viện theo mặc định. Để làm điều đó chỉ làm (bạn phải làm điều đó như root):

cd /etc/ld.so.conf.d/ 

Sau đó chọn ví dụ và chỉnh sửa:

vi libc.conf 

Bên trong tập tin này chỉ cần thêm đường dẫn đến thư mục gốc lib64 như:

/usr/local/cuda/lib64/ 

Bạn sẽ nhận được một cái gì đó như thế này trong các tập tin:

\# libc default configuration 

/usr/local/lib 

/usr/local/cuda/lib64/ 

Và sau đó chỉ cần chạy:

sudo ldconfig 

Hope câu trả lời này sẽ giúp người đó đang bắt đầu nhìn thấy lập trình, hoặc sử dụng các ngôn ngữ cấp cao như trăn có sử dụng mã C bên dưới (như theano không) và không quen thuộc với biên soạn, linkig ...

3

Gần đây tôi đã gặp sự cố tương tự và dành thời gian để tìm hiểu xem điều gì đã xảy ra (đến mức tôi đã hỏng cài đặt Linux của mình và phải cài đặt mới).

Một giải pháp tiềm năng cho lỗi này là để xóa .theano/ thư mục được (có thể) nằm trong thư mục chính của bạn:

sudo rm -rf ~/.theano 

Để tránh lỗi này xảy ra lần nữa, không chạy bạn tập lệnh dưới dạng người dùng root (nghĩa là không có sudo).

Chạy tập lệnh dưới dạng thư mục gốc sẽ tạo thư mục ẩn có quyền root, làm cho nó không thể truy cập được vào các quy trình khác.

4

tôi phải đối mặt với lỗi tương tự trên Ubuntu 16.04 với CUDA 7.5 và tìm thấy giải pháp here:

  1. CUDA 7,5 không hỗ trợ ++ phiên bản mặc định g. Cài đặt một phiên bản được hỗ trợ và làm cho nó mặc định:

    sudo apt-get install g++-4.9 
    
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 20 
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 10 
    
    sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 20 
    sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 10 
    
    sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30 
    sudo update-alternatives --set cc /usr/bin/gcc 
    
    sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30 
    sudo update-alternatives --set c++ /usr/bin/g++ 
    
  2. làm việc xung quanh một lỗi glibc - tạo .theanorc trong thư mục home với các cài đặt sau:

    [global] 
    device=gpu 
    floatX=float32 
    
    [nvcc] 
    flags=-D_FORCE_INLINES 
    

Và không quên kiểm tra biến môi trường: PATH nên chứa vị trí thư mục bin cuda của bạn và CUDA_HOME nên chứa vị trí nhà cuda

Tôi đã thêm nó cho tôi .bashrc nộp theo cách này:

export PATH="/usr/local/cuda/bin:$PATH" 
export CUDA_HOME="/usr/local/cuda:$CUDA_HOME" 
0

Trên gợi ý của Kumar here, tôi đã làm

sudo ldconfig /usr/local/cuda/lib64 

Và nó kỳ diệu bắt đầu làm việc. Cảm ơn Kumar!

Các vấn đề liên quan