diff --git a/CMakeLists.txt b/CMakeLists.txt index 27d172f900b..6a543a495a3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,7 +32,7 @@ caffe_option(USE_CUDNN "Build Caffe with cuDNN library support" ON IF NOT CPU_ON caffe_option(USE_NCCL "Build Caffe with NCCL library support" OFF) caffe_option(BUILD_SHARED_LIBS "Build shared libraries" ON) caffe_option(BUILD_python "Build Python wrapper" ON) -set(python_version "2" CACHE STRING "Specify which Python version to use") +set(python_version "3" CACHE STRING "Specify which Python version to use") caffe_option(BUILD_matlab "Build Matlab wrapper" OFF IF UNIX OR APPLE) caffe_option(BUILD_docs "Build documentation" ON IF UNIX OR APPLE) caffe_option(BUILD_python_layer "Build the Caffe Python layer" ON) diff --git a/Makefile b/Makefile index b7660e852d6..6f9d57ef13a 100644 --- a/Makefile +++ b/Makefile @@ -175,7 +175,8 @@ INCLUDE_DIRS += $(BUILD_INCLUDE_DIR) ./src ./include ifneq ($(CPU_ONLY), 1) INCLUDE_DIRS += $(CUDA_INCLUDE_DIR) LIBRARY_DIRS += $(CUDA_LIB_DIR) - LIBRARIES := cudart cublas curand + LIBRARIES := cudart curand + #LIBRARIES := cudart cublas curand endif LIBRARIES += glog gflags protobuf boost_system boost_filesystem m diff --git a/include/caffe/util/device_alternate.hpp b/include/caffe/util/device_alternate.hpp index e3fe4fe29fd..6f9480df654 100644 --- a/include/caffe/util/device_alternate.hpp +++ b/include/caffe/util/device_alternate.hpp @@ -52,12 +52,12 @@ void classname::funcname##_##gpu(const vector*>& top, \ CHECK_EQ(error, cudaSuccess) << " " << cudaGetErrorString(error); \ } while (0) -#define CUBLAS_CHECK(condition) \ - do { \ - cublasStatus_t status = condition; \ - CHECK_EQ(status, CUBLAS_STATUS_SUCCESS) << " " \ - << caffe::cublasGetErrorString(status); \ - } while (0) +//#define CUBLAS_CHECK(condition) \ +// do { \ +// cublasStatus_t status = condition; \ +// CHECK_EQ(status, CUBLAS_STATUS_SUCCESS) << " " \ +// << caffe::cublasGetErrorString(status); \ +// } while (0) #define CURAND_CHECK(condition) \ do { \ @@ -78,7 +78,7 @@ void classname::funcname##_##gpu(const vector*>& top, \ namespace caffe { // CUDA: library error reporting. -const char* cublasGetErrorString(cublasStatus_t error); +//const char* cublasGetErrorString(cublasStatus_t error); const char* curandGetErrorString(curandStatus_t error); // CUDA: use 512 threads per block diff --git a/scripts/travis/install-deps.sh b/scripts/travis/install-deps.sh index abf9cf1ca70..01e409b43c1 100755 --- a/scripts/travis/install-deps.sh +++ b/scripts/travis/install-deps.sh @@ -100,7 +100,7 @@ if $WITH_CUDA ; then apt-get install -y --no-install-recommends \ cuda-core-$CUDA_PKG_VERSION \ cuda-cudart-dev-$CUDA_PKG_VERSION \ - cuda-cublas-dev-$CUDA_PKG_VERSION \ + #cuda-cublas-dev-$CUDA_PKG_VERSION \ cuda-curand-dev-$CUDA_PKG_VERSION # manually create CUDA symlink ln -s /usr/local/cuda-$CUDA_VERSION /usr/local/cuda diff --git a/src/caffe/common.cpp b/src/caffe/common.cpp index 4f6f9bccc38..c8f23826956 100644 --- a/src/caffe/common.cpp +++ b/src/caffe/common.cpp @@ -105,14 +105,15 @@ void* Caffe::RNG::generator() { #else // Normal GPU + CPU Caffe. Caffe::Caffe() - : cublas_handle_(NULL), curand_generator_(NULL), random_generator_(), + //: cublas_handle_(NULL), curand_generator_(NULL), random_generator_(), + : curand_generator_(NULL), random_generator_(), mode_(Caffe::CPU), solver_count_(1), solver_rank_(0), multiprocess_(false) { // Try to create a cublas handler, and report an error if failed (but we will // keep the program running as one might just want to run CPU code). - if (cublasCreate(&cublas_handle_) != CUBLAS_STATUS_SUCCESS) { - LOG(ERROR) << "Cannot create Cublas handle. Cublas won't be available."; - } + //if (cublasCreate(&cublas_handle_) != CUBLAS_STATUS_SUCCESS) { + // LOG(ERROR) << "Cannot create Cublas handle. Cublas won't be available."; + //} // Try to create a curand handler. if (curandCreateGenerator(&curand_generator_, CURAND_RNG_PSEUDO_DEFAULT) != CURAND_STATUS_SUCCESS || @@ -123,7 +124,7 @@ Caffe::Caffe() } Caffe::~Caffe() { - if (cublas_handle_) CUBLAS_CHECK(cublasDestroy(cublas_handle_)); + //if (cublas_handle_) CUBLAS_CHECK(cublasDestroy(cublas_handle_)); if (curand_generator_) { CURAND_CHECK(curandDestroyGenerator(curand_generator_)); } @@ -156,11 +157,11 @@ void Caffe::SetDevice(const int device_id) { // The call to cudaSetDevice must come before any calls to Get, which // may perform initialization using the GPU. CUDA_CHECK(cudaSetDevice(device_id)); - if (Get().cublas_handle_) CUBLAS_CHECK(cublasDestroy(Get().cublas_handle_)); + //if (Get().cublas_handle_) CUBLAS_CHECK(cublasDestroy(Get().cublas_handle_)); if (Get().curand_generator_) { CURAND_CHECK(curandDestroyGenerator(Get().curand_generator_)); } - CUBLAS_CHECK(cublasCreate(&Get().cublas_handle_)); + //CUBLAS_CHECK(cublasCreate(&Get().cublas_handle_)); CURAND_CHECK(curandCreateGenerator(&Get().curand_generator_, CURAND_RNG_PSEUDO_DEFAULT)); CURAND_CHECK(curandSetPseudoRandomGeneratorSeed(Get().curand_generator_, @@ -258,6 +259,7 @@ void* Caffe::RNG::generator() { return static_cast(generator_->rng()); } +/* const char* cublasGetErrorString(cublasStatus_t error) { switch (error) { case CUBLAS_STATUS_SUCCESS: @@ -287,6 +289,7 @@ const char* cublasGetErrorString(cublasStatus_t error) { } return "Unknown cublas status"; } +*/ const char* curandGetErrorString(curandStatus_t error) { switch (error) { diff --git a/src/caffe/layers/window_data_layer.cpp b/src/caffe/layers/window_data_layer.cpp index 1bf3760e9fd..f41169debe4 100644 --- a/src/caffe/layers/window_data_layer.cpp +++ b/src/caffe/layers/window_data_layer.cpp @@ -290,7 +290,7 @@ void WindowDataLayer::load_batch(Batch* batch) { image_database_cache_[window[WindowDataLayer::IMAGE_INDEX]]; cv_img = DecodeDatumToCVMat(image_cached.second, true); } else { - cv_img = cv::imread(image.first, CV_LOAD_IMAGE_COLOR); + cv_img = cv::imread(image.first, cv::IMREAD_COLOR); if (!cv_img.data) { LOG(ERROR) << "Could not open or find file " << image.first; return; diff --git a/src/caffe/util/io.cpp b/src/caffe/util/io.cpp index 5295d9dddb9..ca3d6de7913 100644 --- a/src/caffe/util/io.cpp +++ b/src/caffe/util/io.cpp @@ -73,8 +73,8 @@ void WriteProtoToBinaryFile(const Message& proto, const char* filename) { cv::Mat ReadImageToCVMat(const string& filename, const int height, const int width, const bool is_color) { cv::Mat cv_img; - int cv_read_flag = (is_color ? CV_LOAD_IMAGE_COLOR : - CV_LOAD_IMAGE_GRAYSCALE); + int cv_read_flag = (is_color ? cv::IMREAD_COLOR: + cv::IMREAD_GRAYSCALE); cv::Mat cv_img_origin = cv::imread(filename, cv_read_flag); if (!cv_img_origin.data) { LOG(ERROR) << "Could not open or find file " << filename; @@ -179,8 +179,8 @@ cv::Mat DecodeDatumToCVMat(const Datum& datum, bool is_color) { CHECK(datum.encoded()) << "Datum not encoded"; const string& data = datum.data(); std::vector vec_data(data.c_str(), data.c_str() + data.size()); - int cv_read_flag = (is_color ? CV_LOAD_IMAGE_COLOR : - CV_LOAD_IMAGE_GRAYSCALE); + int cv_read_flag = (is_color ? cv::IMREAD_COLOR : + cv::IMREAD_GRAYSCALE); cv_img = cv::imdecode(vec_data, cv_read_flag); if (!cv_img.data) { LOG(ERROR) << "Could not decode datum "; diff --git a/src/caffe/util/math_functions.cu b/src/caffe/util/math_functions.cu index 314e6ba0f63..ecec3e72289 100644 --- a/src/caffe/util/math_functions.cu +++ b/src/caffe/util/math_functions.cu @@ -22,8 +22,8 @@ void caffe_gpu_gemm(const CBLAS_TRANSPOSE TransA, (TransA == CblasNoTrans) ? CUBLAS_OP_N : CUBLAS_OP_T; cublasOperation_t cuTransB = (TransB == CblasNoTrans) ? CUBLAS_OP_N : CUBLAS_OP_T; - CUBLAS_CHECK(cublasSgemm(Caffe::cublas_handle(), cuTransB, cuTransA, - N, M, K, &alpha, B, ldb, A, lda, &beta, C, N)); +// CUBLAS_CHECK(cublasSgemm(Caffe::cublas_handle(), cuTransB, cuTransA, +// N, M, K, &alpha, B, ldb, A, lda, &beta, C, N)); } template <> @@ -38,8 +38,8 @@ void caffe_gpu_gemm(const CBLAS_TRANSPOSE TransA, (TransA == CblasNoTrans) ? CUBLAS_OP_N : CUBLAS_OP_T; cublasOperation_t cuTransB = (TransB == CblasNoTrans) ? CUBLAS_OP_N : CUBLAS_OP_T; - CUBLAS_CHECK(cublasDgemm(Caffe::cublas_handle(), cuTransB, cuTransA, - N, M, K, &alpha, B, ldb, A, lda, &beta, C, N)); +// CUBLAS_CHECK(cublasDgemm(Caffe::cublas_handle(), cuTransB, cuTransA, +// N, M, K, &alpha, B, ldb, A, lda, &beta, C, N)); } template <> @@ -48,30 +48,30 @@ void caffe_gpu_gemv(const CBLAS_TRANSPOSE TransA, const int M, const float beta, float* y) { cublasOperation_t cuTransA = (TransA == CblasNoTrans) ? CUBLAS_OP_T : CUBLAS_OP_N; - CUBLAS_CHECK(cublasSgemv(Caffe::cublas_handle(), cuTransA, N, M, &alpha, - A, N, x, 1, &beta, y, 1)); +// CUBLAS_CHECK(cublasSgemv(Caffe::cublas_handle(), cuTransA, N, M, &alpha, +// A, N, x, 1, &beta, y, 1)); } template <> void caffe_gpu_gemv(const CBLAS_TRANSPOSE TransA, const int M, const int N, const double alpha, const double* A, const double* x, const double beta, double* y) { - cublasOperation_t cuTransA = - (TransA == CblasNoTrans) ? CUBLAS_OP_T : CUBLAS_OP_N; - CUBLAS_CHECK(cublasDgemv(Caffe::cublas_handle(), cuTransA, N, M, &alpha, - A, N, x, 1, &beta, y, 1)); +// cublasOperation_t cuTransA = +// (TransA == CblasNoTrans) ? CUBLAS_OP_T : CUBLAS_OP_N; +// CUBLAS_CHECK(cublasDgemv(Caffe::cublas_handle(), cuTransA, N, M, &alpha, +// A, N, x, 1, &beta, y, 1)); } template <> void caffe_gpu_axpy(const int N, const float alpha, const float* X, float* Y) { - CUBLAS_CHECK(cublasSaxpy(Caffe::cublas_handle(), N, &alpha, X, 1, Y, 1)); +// CUBLAS_CHECK(cublasSaxpy(Caffe::cublas_handle(), N, &alpha, X, 1, Y, 1)); } template <> void caffe_gpu_axpy(const int N, const double alpha, const double* X, double* Y) { - CUBLAS_CHECK(cublasDaxpy(Caffe::cublas_handle(), N, &alpha, X, 1, Y, 1)); +// CUBLAS_CHECK(cublasDaxpy(Caffe::cublas_handle(), N, &alpha, X, 1, Y, 1)); } void caffe_gpu_memcpy(const size_t N, const void* X, void* Y) { @@ -82,32 +82,32 @@ void caffe_gpu_memcpy(const size_t N, const void* X, void* Y) { template <> void caffe_gpu_scal(const int N, const float alpha, float *X) { - CUBLAS_CHECK(cublasSscal(Caffe::cublas_handle(), N, &alpha, X, 1)); +// CUBLAS_CHECK(cublasSscal(Caffe::cublas_handle(), N, &alpha, X, 1)); } template <> void caffe_gpu_scal(const int N, const double alpha, double *X) { - CUBLAS_CHECK(cublasDscal(Caffe::cublas_handle(), N, &alpha, X, 1)); +// CUBLAS_CHECK(cublasDscal(Caffe::cublas_handle(), N, &alpha, X, 1)); } template <> void caffe_gpu_scal(const int N, const float alpha, float* X, cudaStream_t str) { cudaStream_t initial_stream; - CUBLAS_CHECK(cublasGetStream(Caffe::cublas_handle(), &initial_stream)); - CUBLAS_CHECK(cublasSetStream(Caffe::cublas_handle(), str)); - CUBLAS_CHECK(cublasSscal(Caffe::cublas_handle(), N, &alpha, X, 1)); - CUBLAS_CHECK(cublasSetStream(Caffe::cublas_handle(), initial_stream)); +// CUBLAS_CHECK(cublasGetStream(Caffe::cublas_handle(), &initial_stream)); +// CUBLAS_CHECK(cublasSetStream(Caffe::cublas_handle(), str)); +// CUBLAS_CHECK(cublasSscal(Caffe::cublas_handle(), N, &alpha, X, 1)); +// CUBLAS_CHECK(cublasSetStream(Caffe::cublas_handle(), initial_stream)); } template <> void caffe_gpu_scal(const int N, const double alpha, double* X, cudaStream_t str) { cudaStream_t initial_stream; - CUBLAS_CHECK(cublasGetStream(Caffe::cublas_handle(), &initial_stream)); - CUBLAS_CHECK(cublasSetStream(Caffe::cublas_handle(), str)); - CUBLAS_CHECK(cublasDscal(Caffe::cublas_handle(), N, &alpha, X, 1)); - CUBLAS_CHECK(cublasSetStream(Caffe::cublas_handle(), initial_stream)); +// CUBLAS_CHECK(cublasGetStream(Caffe::cublas_handle(), &initial_stream)); +// CUBLAS_CHECK(cublasSetStream(Caffe::cublas_handle(), str)); +// CUBLAS_CHECK(cublasDscal(Caffe::cublas_handle(), N, &alpha, X, 1)); +// CUBLAS_CHECK(cublasSetStream(Caffe::cublas_handle(), initial_stream)); } template <> @@ -127,37 +127,37 @@ void caffe_gpu_axpby(const int N, const double alpha, const double* X, template <> void caffe_gpu_dot(const int n, const float* x, const float* y, float* out) { - CUBLAS_CHECK(cublasSdot(Caffe::cublas_handle(), n, x, 1, y, 1, out)); +// CUBLAS_CHECK(cublasSdot(Caffe::cublas_handle(), n, x, 1, y, 1, out)); } template <> void caffe_gpu_dot(const int n, const double* x, const double* y, double * out) { - CUBLAS_CHECK(cublasDdot(Caffe::cublas_handle(), n, x, 1, y, 1, out)); +// CUBLAS_CHECK(cublasDdot(Caffe::cublas_handle(), n, x, 1, y, 1, out)); } template <> void caffe_gpu_asum(const int n, const float* x, float* y) { - CUBLAS_CHECK(cublasSasum(Caffe::cublas_handle(), n, x, 1, y)); +// CUBLAS_CHECK(cublasSasum(Caffe::cublas_handle(), n, x, 1, y)); } template <> void caffe_gpu_asum(const int n, const double* x, double* y) { - CUBLAS_CHECK(cublasDasum(Caffe::cublas_handle(), n, x, 1, y)); +// CUBLAS_CHECK(cublasDasum(Caffe::cublas_handle(), n, x, 1, y)); } template <> void caffe_gpu_scale(const int n, const float alpha, const float *x, float* y) { - CUBLAS_CHECK(cublasScopy(Caffe::cublas_handle(), n, x, 1, y, 1)); - CUBLAS_CHECK(cublasSscal(Caffe::cublas_handle(), n, &alpha, y, 1)); +// CUBLAS_CHECK(cublasScopy(Caffe::cublas_handle(), n, x, 1, y, 1)); +// CUBLAS_CHECK(cublasSscal(Caffe::cublas_handle(), n, &alpha, y, 1)); } template <> void caffe_gpu_scale(const int n, const double alpha, const double *x, double* y) { - CUBLAS_CHECK(cublasDcopy(Caffe::cublas_handle(), n, x, 1, y, 1)); - CUBLAS_CHECK(cublasDscal(Caffe::cublas_handle(), n, &alpha, y, 1)); +// CUBLAS_CHECK(cublasDcopy(Caffe::cublas_handle(), n, x, 1, y, 1)); +// CUBLAS_CHECK(cublasDscal(Caffe::cublas_handle(), n, &alpha, y, 1)); } template