From c4dbe58a6c8b4c64935f0722e8cd51381ae6e38f Mon Sep 17 00:00:00 2001 From: wjunLu Date: Wed, 16 Apr 2025 09:09:06 +0800 Subject: [PATCH] Add AI images --- AI/caffe/1.0/24.03-lts-sp1/Dockerfile | 59 +++++++++++ AI/caffe/1.0/24.03-lts-sp1/Makefile.patch | 26 +++++ AI/caffe/1.0/24.03-lts-sp1/opencv.patch | 116 ++++++++++++++++++++++ AI/caffe/1.0/24.03-lts-sp1/protobuf.patch | 22 ++++ AI/caffe/meta.yml | 2 + AI/image-list.yml | 1 + 6 files changed, 226 insertions(+) create mode 100644 AI/caffe/1.0/24.03-lts-sp1/Dockerfile create mode 100644 AI/caffe/1.0/24.03-lts-sp1/Makefile.patch create mode 100644 AI/caffe/1.0/24.03-lts-sp1/opencv.patch create mode 100644 AI/caffe/1.0/24.03-lts-sp1/protobuf.patch create mode 100644 AI/caffe/meta.yml diff --git a/AI/caffe/1.0/24.03-lts-sp1/Dockerfile b/AI/caffe/1.0/24.03-lts-sp1/Dockerfile new file mode 100644 index 00000000..a56a6530 --- /dev/null +++ b/AI/caffe/1.0/24.03-lts-sp1/Dockerfile @@ -0,0 +1,59 @@ +ARG BASE=openeuler/openeuler:24.03-lts-sp1 +FROM ${BASE} + +ARG VERSION=1.0 + +RUN yum install -y \ + make \ + gcc \ + gcc-c++ \ + cmake \ + git \ + wget \ + boost \ + gflags \ + glog-devel \ + hdf5-devel \ + leveldb-devel \ + lmdb-devel \ + protobuf-devel \ + snappy-devel \ + python-pandas \ + boost-devel \ + python3-devel \ + opencv \ + openblas-devel \ + patch \ + python-pip \ + doxygen \ + ghostscript \ + texlive && \ + yum clean all + +ENV CAFFE_ROOT=/opt/caffe +WORKDIR $CAFFE_ROOT + +RUN git clone -b ${VERSION} --depth 1 https://github.com/BVLC/caffe.git . && \ + pip install --upgrade pip && \ + cd python && \ + for req in $(cat requirements.txt) pydot; do pip install $req; done && \ + ln -s /usr/lib64/libboost_python311.so.1.83.0 /usr/lib64/libboost_python.so && \ + ln -s /usr/bin/python3 /usr/bin/python + +COPY opencv.patch $CAFFE_ROOT/ +COPY protobuf.patch $CAFFE_ROOT/ +COPY Makefile.patch $CAFFE_ROOT/ +RUN cd $CAFFE_ROOT && \ + patch -Np1 < Makefile.patch && \ + patch -Np1 < opencv.patch && \ + patch -Np1 < protobuf.patch && \ + mkdir build && cd build && \ + cmake -DCPU_ONLY=1 .. && \ + make -j"$(nproc)" + +ENV PYCAFFE_ROOT $CAFFE_ROOT/python +ENV PYTHONPATH $PYCAFFE_ROOT:$PYTHONPATH +ENV PATH $CAFFE_ROOT/build/tools:$PYCAFFE_ROOT:$PATH +RUN echo "$CAFFE_ROOT/build/lib" >> /etc/ld.so.conf.d/caffe.conf && ldconfig + +WORKDIR /workspace diff --git a/AI/caffe/1.0/24.03-lts-sp1/Makefile.patch b/AI/caffe/1.0/24.03-lts-sp1/Makefile.patch new file mode 100644 index 00000000..73eaaf76 --- /dev/null +++ b/AI/caffe/1.0/24.03-lts-sp1/Makefile.patch @@ -0,0 +1,26 @@ +diff --git a/Makefile b/Makefile +index 4d324160..fc3f66c5 100644 +--- a/Makefile ++++ b/Makefile +@@ -365,7 +365,7 @@ ifeq ($(WITH_PYTHON_LAYER), 1) + endif + + # BLAS configuration (default = ATLAS) +-BLAS ?= atlas ++BLAS ?= open + ifeq ($(BLAS), mkl) + # MKL + LIBRARIES += mkl_rt +diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake +index 4a5bac47..231d88ee 100644 +--- a/cmake/Dependencies.cmake ++++ b/cmake/Dependencies.cmake +@@ -106,7 +106,7 @@ endif() + + # ---[ BLAS + if(NOT APPLE) +- set(BLAS "Atlas" CACHE STRING "Selected BLAS library") ++ set(BLAS "Open" CACHE STRING "Selected BLAS library") + set_property(CACHE BLAS PROPERTY STRINGS "Atlas;Open;MKL") + + if(BLAS STREQUAL "Atlas" OR BLAS STREQUAL "atlas") diff --git a/AI/caffe/1.0/24.03-lts-sp1/opencv.patch b/AI/caffe/1.0/24.03-lts-sp1/opencv.patch new file mode 100644 index 00000000..d3eec013 --- /dev/null +++ b/AI/caffe/1.0/24.03-lts-sp1/opencv.patch @@ -0,0 +1,116 @@ +From 7f503bd9a19758a173064e299ab9d4cac65ed60f Mon Sep 17 00:00:00 2001 +From: Daniel Bermond +Date: Mon, 26 Nov 2018 13:11:23 +0000 +Subject: [PATCH] Fix build with OpenCV 4.0 + +--- + Makefile | 16 ++++++++++++++-- + Makefile.config.example | 2 +- + src/caffe/layers/window_data_layer.cpp | 2 +- + src/caffe/test/test_io.cpp | 4 ++-- + src/caffe/util/io.cpp | 8 ++++---- + 5 files changed, 22 insertions(+), 10 deletions(-) + +diff --git a/Makefile b/Makefile +index b7660e852d6..95f3443adab 100644 +--- a/Makefile ++++ b/Makefile +@@ -200,9 +200,17 @@ endif + ifeq ($(USE_OPENCV), 1) + LIBRARIES += opencv_core opencv_highgui opencv_imgproc + +- ifeq ($(OPENCV_VERSION), 3) ++ ifeq ($(OPENCV_VERSION), $(filter $(OPENCV_VERSION), 3 4)) + LIBRARIES += opencv_imgcodecs + endif ++ ifeq ($(OPENCV_VERSION), 4) ++ ifeq ($(USE_PKG_CONFIG), 1) ++ INCLUDE_DIRS += $(shell pkg-config opencv4 --cflags-only-I | sed 's/-I//g') ++ else ++ INCLUDE_DIRS += /usr/include/opencv4 /usr/local/include/opencv4 ++ INCLUDE_DIRS += /usr/include/opencv4/opencv /usr/local/include/opencv4/opencv ++ endif ++ endif + + endif + PYTHON_LIBRARIES ?= boost_python python2.7 +@@ -429,7 +437,11 @@ LINKFLAGS += -pthread -fPIC $(COMMON_FLAGS) $(WARNINGS) + + USE_PKG_CONFIG ?= 0 + ifeq ($(USE_PKG_CONFIG), 1) +- PKG_CONFIG := $(shell pkg-config opencv --libs) ++ ifeq ($(OPENCV_VERSION), 4) ++ PKG_CONFIG := $(shell pkg-config opencv4 --libs) ++ else ++ PKG_CONFIG := $(shell pkg-config opencv --libs) ++ endif + else + PKG_CONFIG := + endif +diff --git a/Makefile.config.example b/Makefile.config.example +index 24ca632783a..24802e91534 100644 +--- a/Makefile.config.example ++++ b/Makefile.config.example +@@ -19,7 +19,7 @@ + # possibility of simultaneous read and write + # ALLOW_LMDB_NOLOCK := 1 + +-# Uncomment if you're using OpenCV 3 ++# Uncomment and set accordingly if you're using OpenCV 3/4 + # OPENCV_VERSION := 3 + + # To customize your choice of compiler, uncomment and set the following. +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/test/test_io.cpp b/src/caffe/test/test_io.cpp +index c2c919e90dc..b80df287fba 100644 +--- a/src/caffe/test/test_io.cpp ++++ b/src/caffe/test/test_io.cpp +@@ -20,8 +20,8 @@ class IOTest : public ::testing::Test {}; + bool ReadImageToDatumReference(const string& filename, const int label, + const int height, const int width, const bool is_color, Datum* datum) { + 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) { +diff --git a/src/caffe/util/io.cpp b/src/caffe/util/io.cpp +index 5295d9dddb9..1f9167a114f 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 "; \ No newline at end of file diff --git a/AI/caffe/1.0/24.03-lts-sp1/protobuf.patch b/AI/caffe/1.0/24.03-lts-sp1/protobuf.patch new file mode 100644 index 00000000..c1706988 --- /dev/null +++ b/AI/caffe/1.0/24.03-lts-sp1/protobuf.patch @@ -0,0 +1,22 @@ +From 1b317bab3f6413a1b5d87c9d3a300d785a4173f9 Mon Sep 17 00:00:00 2001 +From: kr0p07k1n <91276442+kr0p07k1n@users.noreply.github.com> +Date: Sun, 28 Nov 2021 19:36:04 -0500 +Subject: [PATCH] use one parameter when calling SetTotalBytesLimit + +--- + src/caffe/util/io.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/caffe/util/io.cpp b/src/caffe/util/io.cpp +index 5295d9dddb9..f71553c9936 100644 +--- a/src/caffe/util/io.cpp ++++ b/src/caffe/util/io.cpp +@@ -54,7 +54,7 @@ bool ReadProtoFromBinaryFile(const char* filename, Message* proto) { + CHECK_NE(fd, -1) << "File not found: " << filename; + ZeroCopyInputStream* raw_input = new FileInputStream(fd); + CodedInputStream* coded_input = new CodedInputStream(raw_input); +- coded_input->SetTotalBytesLimit(kProtoReadBytesLimit, 536870912); ++ coded_input->SetTotalBytesLimit(kProtoReadBytesLimit); + + bool success = proto->ParseFromCodedStream(coded_input); + \ No newline at end of file diff --git a/AI/caffe/meta.yml b/AI/caffe/meta.yml new file mode 100644 index 00000000..c316d6f2 --- /dev/null +++ b/AI/caffe/meta.yml @@ -0,0 +1,2 @@ +1.0-oe2403sp1: + path: 1.0/24.03-lts-sp1/Dockerfile \ No newline at end of file diff --git a/AI/image-list.yml b/AI/image-list.yml index 37ba34e6..03abcd39 100644 --- a/AI/image-list.yml +++ b/AI/image-list.yml @@ -47,3 +47,4 @@ images: vllm-ascend: vllm-ascend langchain: langchain open-webui: open-webui + caffe: caffe \ No newline at end of file -- Gitee